用Qt搭建图书管理系统(五)

第五章 显示图书详细信息界面

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();
}

猜你喜欢

转载自blog.csdn.net/hq_cjj/article/details/79482851