当账号格式合法后,读取保存账号和密码的文档进行匹配
将密码控件的echoMode属性值改为Password即可
examDialog.h
#ifndefEXAMDIALOG_H#defineEXAMDIALOG_H#include
添加属性以及初始化方法
public:voidinitLayout();//初始化布局管理器boolinitTextEdit();//初始化文本编辑器voidinitButton();//初始化按钮及标签private:QTextEdit*m_textEdit;//考试题库显示QLabel*m_titleLabels[10];//题目标签QRadioButton*m_radioBtns[32];//单选按钮QCheckBox*m_checkBtn[4];//多选题按钮QRadioButton*m_radioA;//判断题A选项QRadioButton*m_radioB;//判断题B选项QGridLayout*m_layout;//布局管理器QStringListm_answerList;//答案在initLayout函数中,设置当前窗口为为管理器父窗口,规定控件间的距离以及控件和窗体间的距离
voidExamDialog::initLayout(){//以当前窗口作为父窗口m_layout=newQGridLayout(this);m_layout->setSpacing(10);//设置控件之间的间距m_layout->setMargin(10);//设置窗体与控件键的边距}在initTextEdit函数中,读取文本中的题目信息并将答案行单独存储,将读取到的题目信息显示在控件中,并将控件交给布局管理器在窗体上布局。
ExamDialog::ExamDialog(QWidget*parent):QDialog(parent){//设置字体大小QFontfont;font.setPointSize(12);setFont(font);//设置当前窗口字体//设置窗体背景颜色setPalette(QPalette(QColor(209,215,255)));setWindowTitle("考试已用时:0分0秒");setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint);resize(800,900);//设置窗体大小initTimer();initLayout();if(initTextEdit()){}else{//读取失败QMessageBox::information(this,"提示","初始化题库数据文件失败!");//当前应用程序立刻响应槽方法quitQTimer::singleShot(0,qApp,SLOT(quit()));}}
布局方法就是先将控件初始化,然后交给布局管理器进行布局。但要注意的是单选按钮的分组:每个单选题的四个按钮为一组,判断题的两个按钮为一组
新添加QbuttonGroup属性
private:QButtonGroup*m_btnGroups[9];//单选按钮分组在初始换按钮函数中
首先将提交按钮与信号槽连接
connect(submitBtn,SIGNAL(clicked(bool)),this,SLOT(getScore()));在计算分数前先判断题目是否全部完成,然后根据读取的答案计算分数
intmain(intargc,char*argv[]){QApplicationa(argc,argv);LoginDialogloginDialog;intres=loginDialog.exec();//以模态方式运行if(res==QDialog::Accepted){ExamDialogexamDialog;returna.exec();}else{return0;}returna.exec();}
将当前编译路径由debug转为当前文件所在路径
在项目文件中通过RC_ICONS加载图标
RC_ICONS+=examsys.ico
图标已经更改过来了
将项目由DeBug模式改为Release模式,并编译
建立一个文件夹作为发布文件,将Release下生成的.exe文件和需要的文档拷贝进来
进入要发布文件夹路径,然后输入windeployqt文件名.exe,点击回车
打包完成
如果提示windeployqt不是命令的话需要将安装的qt的bin路径添加到环境变量中