学生管理系统(1:添加学生信息界面)

源码上传至:https://github.com/data1213/QT_Studnt_Manager

添加学生信息界面:

添加学生实现代码:

需求:

1、点击确定按钮时,能够获取当前界面的所有控件的输入信息,在一个新的确认信息界面进行显式,等待确认。

2、在确认界面中,确认ok,点击确定按钮能够将学生信息写入到文件中保存起来,同时,将添加学生信息的界面恢复到初始值状态。

 1 /*********addstudents.h********/
 2 #ifndef ADDSTUDENTS_H
 3 #define ADDSTUDENTS_H
 4 
 5 #include <QDialog>
 6 #include <QButtonGroup>
 7 
 8 namespace Ui {
 9 class AddStudents;
10 }
11 
12 class AddStudents : public QDialog
13 {
14     Q_OBJECT
15 
16 public:
17     explicit AddStudents(QWidget *parent = nullptr);
18     ~AddStudents();
19     void clear_on_addstudent_ok();      //确认界面点击确定之后,恢复添加学生信息界面的初始值
20     void write_to_file(QString src);    //写文件
21 
22 private slots:
23     void my_add_students_info_ok_slots();    //添加学生信息界面的确定按钮槽函数
24     void my_add_students_info_cancel_slots();//添加学生信息界面的取消按钮槽函数
25 private:
26     QButtonGroup *sexGroup;     //存放性别单选按钮
27     QButtonGroup *habbitGroup;  //存放爱好多选按钮
28     Ui::AddStudents *ui;        //添加学生信息界面的UI
29 };
30 
31 #endif // ADDSTUDENTS_H

在addstudents.cpp中:

1、首先看构造函数:

1>需要绑定当前界面的按钮与槽函数,需要点击发送信号的有两个按钮:确定按钮+取消按钮

2>对于性别一栏,两个单选按钮,是互斥的,只能选择其中一个,当一个被选中,那么另外一个一定是未选中状态。

3>对于爱好一栏:四个选项是多选的,可以被同时选中、部分被选中、或者都不选。

这里做些支持处理,使其具有单选功能/多选功能,编组——QButtionGroup

 1 AddStudents::AddStudents(QWidget *parent) :QDialog(parent),ui(new Ui::AddStudents)
 2 {
 3     ui->setupUi(this);
 4 
 5     //单选按钮放进组,多选按钮放进组
 6     sexGroup = new QButtonGroup(this);
 7     sexGroup->addButton(this->ui->rb_male,0);
 8     sexGroup->addButton(this->ui->rb_female,1);
 9     this->ui->rb_male->setChecked(true); //default
10 
11     habbitGroup = new QButtonGroup(this);
12     habbitGroup->addButton(this->ui->cb_1,0);
13     habbitGroup->addButton(this->ui->cb_2,1);
14     habbitGroup->addButton(this->ui->cb_3,2);
15     habbitGroup->addButton(this->ui->cb_4,3);
16     // 设置不互斥
17     habbitGroup->setExclusive(false);//这样的话就支持多选了。
18 
19     //连接“确认”按钮到槽函数
20     connect(this->ui->btn_ok,SIGNAL(clicked()),this,SLOT(my_add_students_info_ok_slots()));
21     //连接“取消”按钮到槽函数
22     connect(this->ui->btn_cancel,SIGNAL(clicked()),this,SLOT(my_add_students_info_cancel_slots()));
23 }

点击确定按钮的槽函数:

1>获取当前控件的信息,然后拼接成QString的字符串,

2>由于要在确认界面中进行学生信息显式,所以用'\n'拼接,显式出来更加容易确认,但是这样的拼接不适用文件保存,文件保存的设计想法:一条学生记录,放在一行来完成。这样可以通过readline方法一次性获取。方便后续进行查询。

3>QMessageBox窗口,作为确认界面,响应确定按钮的之后,实现写文件操作+恢复添加学生信息界面默认值,这里可以直接通过返回值类型标识点击的按钮,不用再绑定信号与槽

 1 void AddStudents::my_add_students_info_ok_slots(){
 2 
 3     QString context = "";  //context用来拼接当前界面所有控件的信息
 4 
 5     //获取姓名+学号
 6     QString name = this->ui->lineedit_name->text();
 7     QString id = this->ui->lineedit_id->text();
 8 
 9     context +=name+'\n'+id+'\n';
10 
11     //获取年龄和院系
12     QString age = this->ui->cb_age->currentText();
13     QString sche = this->ui->cb_sche->currentText();
14 
15     context += age+'\n'+sche+'\n';
16 
17     //获取性别
18     QString sex = this->sexGroup->checkedButton()->text();
19 
20     context += sex+'\n';
21 
22     //获取兴趣,遍历
23     QList<QAbstractButton*> ins_list = habbitGroup->buttons();
24     QString ins="";
25     for(int i =0 ;i<ins_list.length();i++)
26     {
27         QAbstractButton *che = ins_list.at(i);
28         if(che->isChecked())
29             ins += che->text() + " ";
30     }
31     context += ins+'\n';
32     //检查当前是否姓名,学号,爱好都填写完毕
33     if(context.length() != 0 && name != "" && id !="" && ins.length()!= 0){
34         int res = QMessageBox::information(this,"请确认信息",context,"确认","取消");  //context用来显示在确认界面
35         if(res == 0){              //点击确定
36             //由于准备采用readline的方式来读取文件,所以不能是用'\n'来拼接字符串,换成' '符号来重新拼接
37             QString src_s = name +' ' + id+' '+sex+' '+sche+' '+age+' '+ins+'\n';
38             write_to_file(src_s);
39             //恢复添加界面属性值为初始值
40             clear_on_addstudent_ok();
41         }
42     }else{  //当前是否姓名,学号,爱好有一项未填写就返回错误提示界面
43 
44         QMessageBox::critical(this,"请确认信息","信息不完整,请重新输入!","确认","取消");
45         //重新设置光标位置。这里设置name对应的lineEdit控件获取光标
46         this->ui->lineedit_name->setFocus();
47     }
48 }
 1 //当点击添加学生信息界面的确定之后,需要恢复当前界面的初始值,等待继续添加
 2 void AddStudents::clear_on_addstudent_ok(){
 3     //this->ui->lineedit_name->setText("");
 4     this->ui->lineedit_name->clear();
 5     this->ui->lineedit_id->clear();
 6 
 7     //对于sex的单选框,只需要设置默认为男性就好
 8     this->ui->rb_male->setChecked(true);
 9 
10     //下拉菜单恢复设置
11     this->ui->cb_age->setCurrentIndex(0);
12     this->ui->cb_sche->setCurrentIndex(0);
13 
14     //多选框恢复到都未勾选状态
15     QList<QAbstractButton*> ins_list = habbitGroup->buttons();
16     QString ins;
17     for(int i =0 ;i<ins_list.length();i++)
18     {
19         QAbstractButton *che = ins_list.at(i);
20         che->setChecked(false);
21     }
22 
23     //重新设置光标位置。这里设置name对应的lineEdit控件获取光标
24     this->ui->lineedit_name->setFocus();
25 }
26 
27 //保存添加学生信息界面的数据到文本
28 void AddStudents::write_to_file(QString src){
29     QFile file("stu.txt");
30     if (!file.open(QIODevice::Append | QIODevice::Text)){
31         QMessageBox::critical(this,"打开文件错误","确认");
32         return;
33     }
34     QTextStream out(&file);
35     out << src;
36 }
37 
38 //取消按钮的槽函数
39 void AddStudents::my_add_students_info_cancel_slots(){
40     this->close();
41 }

进入添加学生信息界面:

填写完整新增学生信息:

确认界面:

点击确认界面的确定之后,添加学生信息的界面恢复默认值:

同时,在当前编译目录下,生成了stu.txt文本

填写学生信息不完整时,弹出错误窗口:

 

 

 当前知识点:

1> button编组

2> Qfile文件读写

3> QMessagBox窗口以及预定义四种窗口,以及自定义控件、返回值获取

4>Grid layout布局

5>设置光标位置

 

posted @ 2019-05-03 18:34  e-data  阅读(8715)  评论(0编辑  收藏  举报