文章目录

  • 总代码
    • examdialog.h
    • examdialog.cpp
  • 运行效果
  • 重要知识点总结(从代码中提炼出来的)
    • 初始化布局
    • 打开文件并设置字符集
    • 将文本框就设置为只读属性
    • 对于文本内数据的操作
    • 实现窗口显示考试时间
  • 下篇预告

如果需要题库的资料(exam.txt)可以留下邮箱,博主会发给大家的。

总代码

先给大家线上将题库布局好的总代码,本节不需要像之前那样去拖动ui设计,直接使用代码进行实现。后续会将重点知识点总结起来,便与复习与学习。

examdialog.h

//examdialog.h
#ifndef EXAMDIALOG_H
#define EXAMDIALOG_H#include<QDialog>
#include<QTimer>
#include <QTextEdit>
#include <QLabel>
#include <QRadioButton>
#include <QCheckBox>
#include <QGridLayout>
#include <QButtonGroup>class ExamDialog : public QDialog
{//因为我们后期需要使用到 信号与槽机制,所以添加如下代码Q_OBJECTpublic:ExamDialog(QWidget *parent = 0);//正式编写代码了: Qt 命名规则,数据成员一般以 m_开头。类名首写字母以大写字母开头。成员方法一般以小写字母开头。void initTimer();   //初始化计时器void initLayout();  //初始化布局管理器bool initTextEdit();//初始化文本编辑器  --->    因为读取文件可能失败,所以给一个返回值//刷新考试时间:思路:使用QT自带的计时器QTimer *m_timer; //计时器int m_timeGo;   //考试已用时QTextEdit *m_textEdit;  //考试题库显示QLabel *m_titleLabels[10];  //题目标签QButtonGroup *m_btnGroups[9];   //单项按钮分组QRadioButton *m_radioBtns[32];  //单选题按钮QCheckBox *m_checkBtns[4];      //多选题按钮QRadioButton *m_radioA;         //判断题A选项QRadioButton *m_radioB;         //判断题B选项QGridLayout *m_layout;          //布局管理器QStringList m_answerList;       //答案
private slots:void freshTime(); //添加私有的一个槽方法
};#endif // EXAMDIALOG_H

examdialog.cpp

实现 examdialog.h定义的方法
//examdialog.cpp
#include "examdialog.h"
#include <QFile>
#include <QTextStream>
#include <QMessageBox>
#include <QApplication>
#include <QPushButton>ExamDialog::ExamDialog(QWidget* parent):QDialog(parent)
{//设置字体大小QFont font;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()){QMessageBox::information(this,"提示","初始化题库数据文件失败!");//因为初始化失败,所以系统就直接退出(发送信号)。//第一个参数:多久来发送信号(0:立即退出)  第二个参数:想要那个对象相应槽方法(当前应用程序:QApp[应用程序的全局对象])  第三个参数:响应方法QTimer::singleShot(0,qApp,SLOT(quit()));//间隔0s,当前的应用程序执行退出操作}show();
}void ExamDialog::initTimer()
{m_timeGo = 0;m_timer = new QTimer(this);m_timer->setInterval(1000);m_timer->start();connect(m_timer,SIGNAL(timeout()),this,SLOT(freshTime()));
}void ExamDialog::initLayout()
{m_layout = new QGridLayout(this);m_layout->setSpacing(10);   //设置控件间的间距m_layout->setMargin(10);    //设置窗体与控件间的间隙
}bool ExamDialog::initTextEdit()
{QString strLine;        //保存文件中读取到的一行数据QStringList strList;    //保存读取到的答案行QString fileName("exam.txt");QFile file(fileName);QTextStream stream(&file);stream.setCodec("UTF-8");if( file.open(QIODevice::ReadOnly | QIODevice::Text) ){m_textEdit = new QTextEdit(this);m_textEdit->setReadOnly(true);  //将文本设置为只读属性,不然现实的文本框居然还能够被修改。QString strText;    //用于保存显示到文本编辑器的数据int nLines = 0;while(!stream.atEnd()){//过滤首行if(nLines == 0){stream.readLine();nLines++;continue;}//过滤答案行(题目、ABCD、答案一共是6行)。一共有10个题。第十题是判断题需要特殊的处理。if( (nLines >= 6 && nLines <= 6 * 9 && (nLines % 6 == 0) )  /*选择题的答案*/|| (nLines == 6 * 9 + 4)/*判断题的答案行*/){//对于答案行的处理strLine = stream.readLine();    //先读取这一行strList = strLine.split(" ");   //对答案进行处理——以空格进行分割(eg:答案 A)m_answerList.append(strList.at(1));//把答案存放到答案链表里边 因为0:答案 1:A\b\c\dstrText += "\n";nLines++;continue;}//读取一行strText += stream.readLine();strText += "\n";nLines++;}//添加布局m_textEdit->setText(strText);m_layout->addWidget(m_textEdit,0,0,1,10);//窗口对象,行、列、行宽、列宽file.close();return true;}else{return false;}
}void ExamDialog::freshTime()
{m_timeGo++;QString min = QString::number(m_timeGo / 60);QString sec = QString::number(m_timeGo % 60);setWindowTitle("考试已用时:" + min + "分" + sec + "秒");
}

在构造函数中进行初始化

运行效果

因为上一章博客将登录界面暂时隐藏掉了,所以,运行程序就会直接是这个样子

重要知识点总结(从代码中提炼出来的)

初始化布局

 m_layout = new QGridLayout(this);  m_layout->setSpacing(10);   //设置控件间的间距m_layout->setMargin(10);    //设置窗体与控件间的间隙

打开文件并设置字符集

 QString fileName("exam.txt");QFile file(fileName);QTextStream stream(&file);stream.setCodec("UTF-8");

将文本框就设置为只读属性

 m_textEdit = new QTextEdit(this);m_textEdit->setReadOnly(true);  //将文本设置为只读属性,不然现实的文本框居然还能够被修改。

对于文本内数据的操作

 //过滤首行if(nLines == 0){stream.readLine();nLines++;continue;}//读取一行strText += stream.readLine();strText += "\n";nLines++;//处理答案的操作(可放在循环里面)strLine = stream.readLine();    //先读取这一行strList = strLine.split(" ");   //对答案进行处理——以空格进行分割(eg:答案 A)m_answerList.append(strList.at(1));//把答案存放到答案链表里边 因为0:答案 1:A\b\c\dstrText += "\n";nLines++;

实现窗口显示考试时间

setWindowTitle("考试已用时:0分0秒");m_timer = new QTimer(this);
m_timer->setInterval(1000);  //1s钟一次
m_timer->start();connect(m_timer,SIGNAL(timeout()),this,SLOT(freshTime()));

下篇预告

驾校科目一考试系统——布局按钮

07——驾校科目一考试系统——布局题库相关推荐

  1. 06——驾校科目一考试系统——考试时间

    文章目录 考试界面需求分析 具体实现 构建窗体 编写代码 快速在源文件中添加定义小技巧 代码实现 examdialog.h examdialog.cpp 省略登录界面 main.cpp 测试结果 优化 ...

  2. 09驾校科目一考试系统——提交分数

    文章目录 完整版 examdialog.h examdialog.cpp 运行结果 单选未做完: 多选未做完 判断未做完 满分情况 非满分情况 细节剖析 相比于上一版增加的方法和实现 examdial ...

  3. 10驾校科目一考试系统——窗口交互

    文章目录 回顾 完整代码 Examsys.pro examdialog.h examdialog.cpp logindialog.h logindialog.cpp main.cpp 运行效果 登录页 ...

  4. 05——驾校科目一考试系统——验证账号密码

    文章目录 账号密码信息 开始 完整代码 运行 正确输入 错误输入 将密码框进行隐藏 运行结果 下一篇 账号密码信息 开始 回到登录的槽函数. 完整代码 #include "logindial ...

  5. 03——驾校科目一考试系统——登录界面

    文章目录 需求分析 添加标签 添加输入框 添加按钮 运行项目--初始版本 问题:设计界面和生成大小不同的. 解决方案 运行,成功解决 添加功能--补充背景图 做好准备,添加标签 添加资源 运行项目-- ...

  6. 11驾校科目一考试系统——发布项目

    文章目录 发布项目 修改工作目录 使用windeployqt发布 运行结果 如果还是遇到问题 驾校科目一考试系统完结!! 发布项目   当我们编写完项目之后就需要发布项目 .就需要发布项目了.一般发布 ...

  7. 语言在线组卷系统_如何使用在线考试系统创建题库?

    一款优秀的在线考试系统,应该具备试题导入.编辑.查重.导出.组卷等功能,用户可以将试题录入到系统,组建自己的题库,方便用户进行试题资源的整理和共享. 下面我们就以考试云为例,来说一说,怎样才能创建一个 ...

  8. 万维考试系统python题库答案_万维试题库系统官方下载

    万维试题库管理系统是一款相当出色的考试软件,软件拥有很多功能如课程定义,题型支持.试题批量识别导入,雷同试题检测,随机组卷和手工组卷流程控制,透明压缩,双向缓冲处理,数据导入导出共享,相当实用. 基本 ...

  9. 万维考试系统python题库答案_万维全自动考试系统操作手册

    万维全自动网络考试平台 考试设置操作流程 1 / 29 万维捷通软件技术有限公司. 万维全自动网络考试平台 .............................................. ...

最新文章

  1. java封装Mongodb3.2.1工具类
  2. 大叔也说Xamarin~Android篇~Activity之间传递数组
  3. Vue (响应式原理-模拟-4-Dep)
  4. oracle undo表空间缩小,缩小undo表空间全记录
  5. 视频采集以及播放的流程
  6. init.d文件夹 2012-02-09
  7. kubernetes之一:Pod
  8. JavaScript和HTML及CSS的通俗解释
  9. 三坐标检测之报告查看T值
  10. 如何进行自动驾驶算法开发
  11. Scala Test
  12. cadence SPB17.4 - 中文UI设置
  13. Onvif协议学习:14、球机云台控制PTZ
  14. Non-local:用于捕获长距离依赖关系
  15. java集成极光推送实现Android的消息推送
  16. 【图形】输出一行星号
  17. 【论文笔记1】von Mises-Fisher Mixture Model-based Deep learning: Application to Face Verification
  18. MaxEnt框架下的RL
  19. Cadence Allegro 板框倒角设置方法
  20. 《那些年啊,那些事——一个程序员的奋斗史》——14

热门文章

  1. 假技术po主之每日笑话
  2. MapGIS 学习资料下载
  3. 【relativistic GAN :细节注入】
  4. WORD,PDF中最护眼的颜色
  5. CSS是什么?CSS样式规则
  6. xshell启动报nssock2_nssock2.dll下载|
  7. 计算机三级网络技术第十章(第一轮)
  8. 云服务器被植入挖矿木马,CPU飙升200%
  9. 智能复制粘贴剪切板管理工具——Pastebot
  10. 安装VS.net2003时 microsoft Frontpage 2000 web 扩展客户端安装失败的解决办法