[QT]学生管理系统 分析

发布时间 2023-08-24 22:19:10作者: timeMachine331

在连接信号与槽函数时,重要的是确保信号的声明与槽函数的定义能够被正确关联。

信号可以只声明不定义,槽声明之后必须定义其如何响应。

信号可以自定义,信号可以传参可以不传,但槽的接收参数必须要小于信号传出的参数,槽可以是一个宏定义的结果值(操作结果),可以是函数(槽响应操作后再自己产生结果)

项目创建选用的widget作为父类,可以作为不知道选择用对话框还是窗口时的一种通用选择。

主窗口采用QHBoxLayout水平布局,添加两个空间,构成左Groupbox跟右Groupbox。在create函数内部实现信号与槽的连接

QHBoxLayout *HBoxLayout = new QHBoxLayout(this);
QGroupBox *Left_Table_Box = createStuMess();
QGroupBox *Right_Table_Box = createMenu();

HBoxLayout->addWidget(Left_Table_Box,4);
HBoxLayout->addWidget(Right_Table_Box,2);

 构建学生信息面板,Left_Table_Box 中只包含一个 QTableWidget 表格控件,为了使表格尺寸自适应整个窗口,将表格添加到了 QHBoxLayout 布局工具中。

当用户点击某个单元格时,更新列表中显示的学生信息

当用户更改某个单元格内的内容时,调用 changeStuMess() 方法处理

将用户更改某个单元格内的内容时,同时还要更新表格中显示的学生信息

学生信息很容易被修改,直接双击选择学生信息面板某一个学生信息的某一个属性,就会进入编辑状态,这合理吗 cellChanged信号会在cell被点击了之后发射。 这信号函数体里都是空的

AutoHBoxLayout->addWidget(TableWidget);
box->setLayout(AutoHBoxLayout);

构建功能面板
最外层有 QGroupBox 分组框,内部用 QVBoxLayout 将整个区域分为上下两部分,分别嵌入 QListWidget 和 QGridLayout
QGridLayout 内包含添加、删除、保存、退出按钮和 1 个实现查找功能的单行输入框。

向输入框内输入学生信息查找,和直接在左侧学生信息面板点击,都是一样的,都会执行 findStuMess() 方法

点击添加按钮,执行 addStuBox() 方法

点击删除按钮,执行 delStuFun() 方法

点击退出按钮,关闭主窗口

点击保存按钮,执行 saveStuMess() 方法

 

____________________________________________________________________________

唯一难点在于点击添加按钮的新窗口设计上。

当点击添加按钮时,弹出添加学生信息的子窗口,这个新的窗口要如何进行封装。

当添加学生信息窗口关闭时,更新表格,同时清空列表中显示的学生信息

 这个页面是qdialog类,设置一个layout,类型取决于layout内部的布局,可以看见内部需要上下分割,因而是vlayout,vlayout再setlayout 上面是一个formlayout,下面是一个hlayout,上面添加labeltext跟lineedit即可,下面添加两个pushbotton。

当前的确认会以附加的方式向本地文本的末尾追加一个学生类信息,以DataStream二进制的形式写入。

从这个页面退出时会释放一个closebox信号,这个信号只有声明没有定义,但它不需要传出参数,所以不影响,只需要用它去触发另外的槽函数即可。