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

第十章 添加书籍 

 

https://gitee.com/mayonaka/LibraryManageSystem

百度云:https://pan.baidu.com/s/1G95yPyGG080b6yXcjc8B0g

提取码:4q8b

 

 

添加书籍界面的设计思想很简单,是在界面上显示几个输入框,让用户填写书籍的信息,在用户点确认按钮后,需要判断用户是否填写了信息。

新建一个Qt设计师界面类,界面模板选Widget,类名改为AddBook。

下面开始添加书籍界面的界面设计,借书界面有五个Label用于提示用户输入什么,四个LineEdit和一个TextEdit用于接收用户的输入,两个Push Button:

1.    Label:显示文字:“书籍编号”,变量名:没用到,可不该。

2.    Label:显示文字:“书籍名称”,变量名:没用到,可不该。

3.    Label:显示文字:“书籍作者”,变量名:没用到,可不该。

4.    Label:显示文字:“书籍类型”,变量名:没用到,可不该。

5.    Label:显示文字:“书籍介绍”,变量名:没用到,可不该。

6.    LineEdit:显示文字:无,变量名:idLineEdit。

7.    LineEdit:显示文字:无,变量名:nameLineEdit。

8.    LineEdit:显示文字:无,变量名:authorLineEdit。

9.    LineEdit:显示文字:无,变量名:categoryLineEidt。

10.  TextEdit:显示文字:无,变量名:introductionTextEdit。

11.  Push Button:显示文字:“确定”,变量名:confirmPushButton。

 

12.  Push Button:显示文字:“取消”,变量名:cancelPushButton。

 

 

类的声明:

类的属性:

1.    book: 储存所有的书的信息。

2.    addBook:储存添加的书信息。

 

类的方法:

1.    closeEvent:拦截关闭事件,询问用户是否保存操作。

 

2.    AddBookSlot:用户点确定按钮后,保存用户输入的书信息。

 

#include <QWidget>
#include "book.h"

namespace Ui {
class AddBook;
}

class AddBook : public QWidget
{
    Q_OBJECT

public:
    explicit AddBook(Book* node, Book* node2, QWidget *parent = 0);
    ~AddBook();

    void closeEvent(QCloseEvent* e);

public slots:
    void AddBookSlot();

protected:
    Book* book = NULL;
    Book* addBook = NULL;

private:
    Ui::AddBook *ui;
};

类的实现:

1.    构造函数:设置窗口标题,初始化变量,连接信号与槽。

2.    AddBookSlot:首先判断用户是否有输入,这里只判断了用户是否输入了书的id,然后new一个BookType类型的变量,根据用户的输入来给变量的属性赋值,最后把该变量插入addBook链表。

3.    closeEvent:先弹出一个对话框,询问用户是否保存操作,用户点Save按钮后,就把用户添加的书插入book链表,并保存到数据库中,用户点Cancel按钮后,则清空addBook链表。

#include <QMessageBox>
#include "addbook.h"
#include "ui_addbook.h"

AddBook::AddBook(Book *node, Book *node2, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::AddBook)
{
    ui->setupUi(this);
    this->setWindowTitle(QString::fromLocal8Bit("添加书籍"));

    this->book = node;
    this->addBook = node2;

    QObject::connect(ui->confirmPushButton, SIGNAL(clicked()),
                     this, SLOT(AddBookSlot()));
    QObject::connect(ui->cancelPushButton, SIGNAL(clicked()),
                     this, SLOT(close()));
}

AddBook::~AddBook()
{
    delete ui;
}

void AddBook::closeEvent(QCloseEvent *e)
{
    // 弹出对话框,询问是否保存
    QMessageBox::StandardButton msg = QMessageBox::information(this,
              tr("Prompt"),
              tr("Save You Operation?"),
              QMessageBox::Save,
              QMessageBox::Cancel);

    switch (msg)
    {
    case QMessageBox::Save:
    {
        // 把添加的书添加到book中
        BookType* node = (BookType*)this->addBook->GetNode(-1);
        node = (BookType*)node->GetNext();
        while (node != NULL)
        {
            BookType* node2 = new BookType();
            node2->SetId(node->GetId());
            node2->SetName(node->GetName());
            node2->SetAuthor(node->GetAuthor());
            node2->SetCategory(node->GetCategory());
            node2->SetIntroduction(node->GetIntroduction());
            this->book->AddNode(node2);

            node = (BookType*)node->GetNext();
        }
        // 把添加的书保存到数据库中
        this->addBook->Save();
    } break;
    case QMessageBox::Cancel:
    {
        // 清空添加的书
        this->addBook->Clear();
    } break;
    default:
        break;
    }
}

void AddBook::AddBookSlot()
{
    // 判断用户是否有输入
    // 这里只判断了用户是否输入了书的id
    // isModified函数判断LineEdit是否被修改
    if (!ui->idLineEdit->isModified())
    {
        return;
    }

    // 根据用户输入的信息新建一个书
    // 并插入到addBook链表中
    BookType* node = new BookType();
    node->SetId(ui->idLineEdit->text().toInt());
    node->SetName(ui->nameLineEdit->text());
    node->SetAuthor(ui->authorLineEdit->text());
    node->SetCategory(ui->categoryLineEdit->text());
    node->SetIntroduction(ui->introductionTextEdit->toPlainText());

    this->addBook->AddNode(node);

    this->close();
}

 

void AdminInterface::AddBookSlot()
{
    AddBook* w = new AddBook(this->book, this->addBook);
    // 设置当AddBook界面关闭后自动销毁
    // 界面销毁时会产生destroyed信号
    // 当管理员界面收到destroyed信号时,重新显示书籍
    w->setAttribute(Qt::WA_DeleteOnClose);
    QObject::connect(w, SIGNAL(destroyed()), this, SLOT(ShowAllBooks()));
    w->show();
}

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值