在连接信号与槽函数时,重要的是确保信号的声明与槽函数的定义能够被正确关联。
信号可以只声明不定义,槽声明之后必须定义其如何响应。
信号可以自定义,信号可以传参可以不传,但槽的接收参数必须要小于信号传出的参数,槽可以是一个宏定义的结果值(操作结果),可以是函数(槽响应操作后再自己产生结果)
项目创建选用的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信号,这个信号只有声明没有定义,但它不需要传出参数,所以不影响,只需要用它去触发另外的槽函数即可。
标签:QT,管理系统,信息,学生,点击,添加,信号,按钮 From: https://www.cnblogs.com/synapse331/p/17654890.html