第五章 显示图书详细信息界面
https://gitee.com/mayonaka/LibraryManageSystem
百度云:https://pan.baidu.com/s/1G95yPyGG080b6yXcjc8B0g
提取码:4q8b
上一章已经把双击的信号与显示详细信息的槽连接了,但是因为没有建显示图书详细信息的界面,所以函数是空的,这一章,我们将编写一个显示图书详细信息的界面。
为了程序的简洁性,我们只给书这个类添加了四个属性:名称,作者,类型,介绍。这样可以让我们把注意力集中到实现逻辑上,而非实现细节。
现在开始编写显示图书详细信息的界面:
1. 新建一个Qt设计师界面类,界面模板选择Widget,类名改为BookInfo。
2. 双击bookinfo.ui开始设计界面,添加三个Label,一个Text Browser。
三个Label都不用该显示文字,要根据具体的书籍信息来显示文字。变量名依次改为:nameLabel,authorLabel,categoryLabel,Text Browser变量名改为introductionTextBrowser。
3. 类的实现很简单,只要在构造函数里,根据传进来的BookType类型变量值修改四个控件的显示文字就行了。
#include <QWidget>
#include "nodetype.h"
namespace Ui {
class BookInfo;
}
class BookInfo : public QWidget
{
Q_OBJECT
public:
explicit BookInfo(BookType* node, QWidget *parent = 0);
~BookInfo();
private:
Ui::BookInfo *ui;
};
#include "bookinfo.h"
#include "ui_bookinfo.h"
BookInfo::BookInfo(BookType *node, QWidget *parent) :
QWidget(parent),
ui(new Ui::BookInfo)
{
ui->setupUi(this);
this->setWindowTitle(QString::fromLocal8Bit("书籍信息"));
if (node == NULL)
{
return;
}
// 更改Label和Text Browser的显示文字
ui->nameLabel->setText(node->GetName());
ui->authorLabel->setText(node->GetAuthor());
ui->categoryLabel->setText(node->GetCategory());
ui->introductionTextBrowser->setText(node->GetIntroduction());
}
BookInfo::~BookInfo()
{
delete ui;
}
4.在UserInterface类的ShowUserInfoSlot槽函数中,先根据双击信号传来的值(双击信号共传了两个参数,一个是QTreeWidget类型,值就是被双击的那一行元素,另一个是int类型,值是被双击那一行的行号)获得书的id,再从所有书籍中找到其对应的节点,然后把它传给BookInfo类。这样BookInfo类就可以显示书的所有信息了。
// UserInterface.cpp
// 打开显示书本详细信息的界面
void UserInterface::ShowBookInfoSlot(QTreeWidgetItem *item, int column)
{
BookType* node = (BookType*)this->book->GetNode(item->text(0).toInt());
BookInfo* w = new BookInfo(node);
w->show();
}