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

第十二章 添加用户 

https://gitee.com/mayonaka/LibraryManageSystem

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

提取码:4q8b

添加用户的界面可以是和添加书籍的界面基本类似,只是有一点实现细节不同。

添加一个Qt设计师界面类,界面模板选择Widget,类名改为AddUser。

 

添加用户界面共有三个Label作为提示信息,三个LineEdit用于接受用户收入,两个Push Button。

1.    Label:显示文字:“用户编号”,变量名:未用到,可不改。

2.    Label:显示文字:“用户名”, 变量名:未用到,可不改。

3.    Label:显示文字:“用户密码”, 变量名:未用到,可不改。

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

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

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

 

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

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

类的声明:

类的属性:

1.    user:储存所有有用户的信息。

2.    addUser:储存添加的用户的信息。

类的方法:

1.    AddUserSlot:添加用户的槽函数,当用户点击确定按钮后,进入此函数,处理添加用户的具体操作。

 

2.    closeEvent:拦截关闭事件,自定义界面关闭时要处理的事务。

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

namespace Ui {
class AddUser;
}

class AddUser : public QWidget
{
    Q_OBJECT

public:
    explicit AddUser(User* node, User* node2, QWidget *parent = 0);
    ~AddUser();

    void closeEvent(QCloseEvent* e);

public slots:
    void AddUserSlot();

protected:
    User* user = NULL;
    User* addUser = NULL;

private:
    Ui::AddUser *ui;
};

类的实现:

1.    先设置一下窗口标题,然后初始化变量,最后连接一下信号与槽。

2.    AddUserSlot:先判断是否输入了信息,没有就退出,如果输入了信息,把输入的信息转换成UserType对象,添加到addUser链表中去。

3.    closeEvent:弹出对话框,询问用户是否保存操作,如果用户选择Save,把addUser链表中的信息添加到user链表中去,同时也把它们保存到数据库中去。如果用户选择Cancel,清空addUser链表即可。

如果出现错误:

admininterface.obj : error LNK2019: 无法解析的外部符号 "public:__cdecl AddUser::AddUser(class User *,class User *,class QWidget *)"(??0AddUser@@QEAA@PEAVUser@@0PEAVQWidget@@@Z),该符号在函数"public: void __cdecl AdminInterface::AddUserSlot(void)"(?AddUserSlot@AdminInterface@@QEAAXXZ) 中被引用

debug\LibraryManageSystem.exe : fatalerror LNK1120: 1 个无法解析的外部命令。

 

执行一下qmake就行了。

#include <QMessageBox>
#include "adduser.h"
#include "ui_adduser.h"

AddUser::AddUser(User *node, User *node2, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::AddUser)
{
    ui->setupUi(this);    
    this->setWindowTitle(QString::fromLocal8Bit("添加用户"));

    this->user = node;
    this->addUser = node2;

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

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

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

    switch (msg)
    {
    case QMessageBox::Save:
    {
        // 把添加的用户添加到user中
        UserType* node = (UserType*)this->addUser->GetNode(-1);
        node = (UserType*)node->GetNext();
        while (node != NULL)
        {
            UserType* node2 = new UserType();
            node2->SetId(node->GetId());
            node2->SetName(node->GetName());
            node2->SetPassword(node->GetPassword());
            this->user->AddNode(node2);

            node = (UserType*)node->GetNext();
        }
        // 把添加的用户保存到数据库中
        this->addUser->Save();

    } break;
    case QMessageBox::Cancel:
    {
        // 清空添加的用户
        this->addUser->Clear();
    } break;
    default:
        break;
    }
}

void AddUser::AddUserSlot()
{
    // 没有填写信息就退出
    // 这里只检查了是否填写了id
    if (ui->idLineEdit->text().isEmpty())
    {
        return;
    }

    UserType* node = new UserType();
    node->SetId(ui->idLineEdit->text().toInt());
    node->SetName(ui->nameLineEdit->text());
    node->SetPassword(ui->passwordLineEdit->text());

    this->addUser->AddNode(node);

    this->close();
}
void AdminInterface::AddUserSlot()
{
    AddUser* w = new AddUser(this->user, this->addUser);
    // 设置当AddUser界面关闭后自动销毁
    // 界面销毁时会产生destroyed信号
    // 当管理员界面收到destroyed信号时,重新显示用户
    w->setAttribute(Qt::WA_DeleteOnClose);
    QObject::connect(w, SIGNAL(destroyed()), this, SLOT(ShowAllUsers()));
    w->show();
}

猜你喜欢

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