第十章 添加书籍
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();
}