博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学生管理系统(3:添加查询界面)
阅读量:4573 次
发布时间:2019-06-08

本文共 6111 字,大约阅读时间需要 20 分钟。

源码上传至:

需求:

1、在主窗口中菜单选项中设置查询菜单选项,能够跳转到查询界面。

2、设计查询界面,设置查询类型(按学生姓名、学号、院系)

3、从Qfile中获取数据源,匹配查询结果,并在tableview控件中显式

 

这里需要一个查询界面,先定义出来,定义为Dialog的窗口

query_students.ui中定义窗口控件:这里的tableview是model base中的

 

1 /****query_students.h*****/ 2 #ifndef QUERY_STUDENTS_H 3 #define QUERY_STUDENTS_H 4  5 #include 
6 #include
7 #include
8 9 namespace Ui {10 class Query_Students;11 }12 13 class Query_Students : public QDialog14 {15 Q_OBJECT16 17 public:18 explicit Query_Students(QWidget *parent = nullptr);19 ~Query_Students();20 21 int read_from_file(); //获取文件中的学生信息数据源22 void do_query(int index,QString text); //根据下拉框+lineEdit输入的信息进行开始查找匹配23 void match_stud_info(int row,QStringList subs); //匹配信息,然后填充tableview控件之学生信息表格显示24 void set_table_title(); //设置tableview控件数据之表头25 private slots:26 void start_to_query(); //响应"开始查找"按钮27 28 private:29 Ui::Query_Students *ui;30 QList
stud_info_list; //存放Qfile中所有读取到的学生信息,多条QString字符串构成的集合31 32 QStandardItemModel* model; //表对象——存放tableview的数据33 };34 35 #endif // QUERY_STUDENTS_H

在query_students构造方法中:

1>先将Qfile文件中所有学生信息读取出来,为什么要在此读取,而不是在点击 "开始查询"时读取。

开始查询,在实际情况中,可能会点击多次,如果绑定了读取文件操作,那么会多次读取,而在构造方法中,那么在查询窗口出来时,表示用户正要进行查询,所以有必要一次性读取全部信息,然后剩下的就是内存操作了,速度更快。

2>绑定"开始查询"按钮,响应开始查询匹配,然后,匹配到的学生信息,将被填充到tableview中

3>创建表对象,并且添加表头数据,这样,在查询窗口生成时,能够看到表头信息,知道可能有学生的哪些信息被显式。

1 Query_Students::Query_Students(QWidget *parent) :QDialog(parent),ui(new Ui::Query_Students) 2 { 3     ui->setupUi(this); 4  5     //创建查询窗口的时候,将文件数据全部获取到内存——stud_info_list中待用。 6     int res = read_from_file(); 7     if(res == -1){ 8         this->close();  //打开文件失败,关闭当前窗口 9     }10 11     //绑定 “开始查询”按钮到槽函数12     connect(this->ui->btn_query,SIGNAL(clicked()),this,SLOT(start_to_query()));13 14     /*15     创建一个表对象16     */17     this->model = new QStandardItemModel();18     /*19     为表的对应行、列锁定的表项填入数据20     */21     //1、设置表头,setHorizontalHeaderItem不需要行参数(就是第一行),需要:列号+要显式的内容22     //表头是需要在窗口显式出来的时候就显式的,而数据项是在点击“开始查询”之后才填入的。23     this->set_table_title();24     //除表头外的数据后续添加...25 26     //关联表对象与tableview控件,这样表的内容就显式到tableview控件上去了27     this->ui->tableView->setModel(model);28 29 }

表头数据以及列宽设置:

1 void Query_Students::set_table_title(){ 2     this->model->setHorizontalHeaderItem(0,new QStandardItem("姓名")); 3     this->model->setHorizontalHeaderItem(1,new QStandardItem("学号")); 4     this->model->setHorizontalHeaderItem(2,new QStandardItem("性别")); 5     this->model->setHorizontalHeaderItem(3,new QStandardItem("院系")); 6     this->model->setHorizontalHeaderItem(4,new QStandardItem("年龄")); 7     this->model->setHorizontalHeaderItem(5,new QStandardItem("爱好")); 8  9     this->ui->tableView->setColumnWidth(0,50);10     this->ui->tableView->setColumnWidth(1,50);11     this->ui->tableView->setColumnWidth(2,50);12     this->ui->tableView->setColumnWidth(3,100);13     this->ui->tableView->setColumnWidth(4,50);14     this->ui->tableView->setColumnWidth(5,100);15 }

效果显式:

从Qfile文件读取学生的信息操作:

1 //读取学生信息操作 2 int Query_Students::read_from_file(){ 3  4     QString line_info=""; 5     QFile file("stu.txt"); 6     if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){ 7         QMessageBox::critical(this,"打开文件错误","确认"); 8         return -1; 9     }10     QTextStream in(&file);11     while (!in.atEnd()) {12         line_info = in.readLine();13         this->stud_info_list.append(line_info);14     }15     //关闭文件16     file.close();17     return 0;18 }

开始查询:

1 void Query_Students::start_to_query(){ 2  3     //为了不显示上一次查询的结果,清空当前tableview数据,包括表头 4     this->model->clear(); 5     //重新设置表头 6     this->set_table_title(); 7  8     //获取当前准备查询的类型,以及lineEdit的内容 9     int methd = this->ui->cb_query->currentIndex();10     QString cnt = this->ui->le_query->text();11     this->do_query(methd,cnt);12 }

 利用界面的下拉框+lineEdit信息去匹配到,具体哪一条学生信息记录:

1 //匹配算法 2 void Query_Students::do_query(int index,QString text){ 3     //原始数据都在:QList
stud_info_list; 4 //遍历 5 int row = 0; 6 for(int i=0;i
stud_info_list.length();i++){ 7 QString line = this->stud_info_list.at(i); //取出一条记录 8 //去掉开头和末尾的空格字符 9 line = line.trimmed();10 //分割11 QStringList qlist = line.split(" ");12 //匹配13 switch(index){14 case 0: //按姓名查找15 if(text == qlist.at(0)){ //qlist.at(0)就是文件中读取的一条记录被分割的姓名字符串16 qDebug()<
match_stud_info(row++,qlist);18 }19 break;20 case 1: //按学号21 if(text == qlist.at(1)){ //学号匹配22 this->match_stud_info(row++,qlist);23 qDebug()<
match_stud_info(row++,qlist);29 qDebug()<

匹配到具体的那条记录之后,需要将其填入tableview的表格中:

1 /* 2 当获取到文件中一行记录之后,并且转换为QStringList对象了,需要将其填入到指定的行、列标识的表中 3 setItem:一次只能填一个表格的信息,需要知道行号+列号+内容 4 */ 5 void Query_Students::match_stud_info(int row,QStringList subs){ 6     //前面五个都是1对1的,比如:姓名-->jerry 7     for(int i = 0;i<5;i++){ 8         this->model->setItem(row,i,new QStandardItem(subs.at(i))); 9     }10     //对于爱好,由于是1对多的,需要拼接所有,然后显示在一个表格中11     QString line_item ="";12     for(int i=5;i
model->setItem(row,5,new QStandardItem(line_item));16 }

演示效果:

 主窗口中绑定查询菜单和添加学生信息菜单:

1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 #include "addstudents.h" 4 #include 
5 6 MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) 7 { 8 ui->setupUi(this); 9 10 //连接创建的菜单到槽11 connect(this->ui->actionAdd_Students,SIGNAL(triggered()),this,SLOT(show_my_Add_stud_Dialog()));12 connect(this->ui->actionQuery_Students,SIGNAL(triggered()),this,SLOT(show_my_Query_stud_Dialog()));13 }14 15 MainWindow::~MainWindow()16 {17 delete ui;18 qDebug()<<"主窗口完成退出";19 }20 21 void MainWindow::show_my_Add_stud_Dialog(){22 AS.show();23 }24 void MainWindow::show_my_Query_stud_Dialog(){25 QS.show();26 }

 

转载于:https://www.cnblogs.com/data1213/p/10806010.html

你可能感兴趣的文章
设计模式目录
查看>>
Qt入门(14)——父窗口部件和子窗口部件
查看>>
SSH(spring+struts2+hibernate)XML式配置
查看>>
基于Callable和Future的匹配文件数量计算实例
查看>>
SQL SERVER拓展存储过程
查看>>
函数式接口(Functional Interface)
查看>>
HTML 5--新增的其他属性
查看>>
JAVA面对对象(四)——抽象类
查看>>
CTF资源
查看>>
阿里云 yum 源
查看>>
Fraction to Recurring Decimal
查看>>
常用js正则表达式大全
查看>>
js数组的各种方法
查看>>
win10高清屏部分软件显示模糊解决方法
查看>>
MySQL常用基础函数
查看>>
2012NOIP模拟试题
查看>>
[lintcode] Binary Tree Preorder Traversal
查看>>
jquery.fn.extend与jquery.extend
查看>>
nopCommerce 3.9 大波浪系列 之 NUnit 配置调试环境
查看>>
2019牛客暑期多校训练营(第三场)- H Magic Line (计算几何)
查看>>