學生管理系統(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>設置光標位置
學生管理系統(1:添加學生信息界面)