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

简介: 考试界面需求分析

考试界面需求分析

考试用时
考试题库
答题卡
提交试卷

具体实现

构建窗体

3dbcef85fadd41e88c4adcc0ca5ac00c.png


16b6bd4752204f79b492f925c75df7ac.png

93556fe296bd40d4a100018331166ae4.png

f3283049206c4069a6091d11228ca48f.png

在正式编写之前先对构造函数进行一个优化。


b082f38b094d49d1910e81fac7d6e351.png

编写代码

    ExamDialog(QWidget *parent = 0);

       c2f905aacac040dca01ae81643ef593f.png                        

ExamDialog::ExamDialog(QWidget *parent):QDialog(parent)
{
}

8af1af1417584238815ef6e4f60814e3.png

快速在源文件中添加定义小技巧

ae82f84bee694c71995d934fb5eb4c3c.png

代码实现

examdialog.h

//examdialog.h
#ifndef EXAMDIALOG_H
#define EXAMDIALOG_H
#include<QDialog>
#include<QTimer>
class ExamDialog : public QDialog
{
    //因为我们后期需要使用到 信号与槽机制,所以添加如下代码
    Q_OBJECT
public:
    ExamDialog(QWidget *parent = 0);
    //正式编写代码了: Qt 命名规则,数据成员一般以 m_开头。类名首写字母以大写字母开头。成员方法一般以小写字母开头。
    void initTimer();   //初始化计时器
    //刷新考试时间:思路:使用QT自带的计时器
    QTimer *m_timer; //计时器
    int m_timeGo;   //
private slots:
    void freshTime(); //添加私有的一个槽方法
};
#endif // EXAMDIALOG_H

examdialog.cpp

//examdialog.cpp
#include "examdialog.h"
ExamDialog::ExamDialog(QWidget *parent):QDialog(parent)
{
    // 调用初始化计时器
    initTimer();
}
void ExamDialog::initTimer()
{
    m_timeGo = 0;   //开始的考试时间为0
    m_timer = new QTimer(this);
    m_timer->setInterval(1000); //设置一秒钟触发一次
    m_timer->start();//启动计时器
    //我们想要做得事情是:刷新这个考试窗口用时。//让两者联系起来,也即信号与槽。
    //参数一:发送信号的对象 参数二:发送什么信号、参数三:响应信号的对象 参数四:执行的槽方法
    connect(m_timer,SIGNAL(timeout()),this,SLOT(freshTime()));  // timeout()是系统自带的,freshTime()需要自己写。
    //去头文件examdialog.h 添加 相应的槽方法
}
void ExamDialog::freshTime() //添加私有的一个槽方法
{
    //刷新考试用时
    m_timeGo++; //每一调用刷新窗口的方法都代表有一秒钟过去了,所以我们的考试用时每次都要+1
    //计算时间,为了设置标题显示
    QString min = QString::number( m_timeGo/60);//number() 方法会将计算的数字转换成 QString字符串格式
    QString sec = QString::number( m_timeGo%60);
    setWindowTitle("考试已用时:"+min+"分"+sec+"秒");//设置窗口标题:多少分多少秒
}

省略登录界面

因为本项目重点是考试时间,所以在使用登录界面就会略显繁琐了,估将登录界面注释掉,换成考试时间界面。

095bb0890cb943c5881f098645ceaf19.png

main.cpp

//main.cpp
#include "logindialog.h"
#include <QApplication>
#include"examdialog.h"
int main(int argc, char *argv[])//程序的入口函数
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,9,0))
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
    QApplication     a(argc, argv);//应用程序类,建立了一个对象a
    //为了方便调试所以将登录界面注释掉,换成新的
//    LoginDialog w;  //w对象就是登录窗口对象
//    w.show();       //show方法就是对象框显示出来的功能。
    //显示本次的考试窗口
    ExamDialog w;
    w.show();
    return a.exec();  //exec的作用就是使对象进入消息循环类似于下面的例子。
    /*
     * 死循环让程序一直运行,生命循环,消息循环
     * while(1)
     * {
     *      if(点击x按钮)
     *          break;
     *      if(点击了最小化按钮)
     *          最小化动作;
     *      ...
     * }
     *
     */
}

测试结果

可以看到一开始显示的并不是 考试时间,后面才显示的考试时间。故对此进行优化。

4f26b6b345d749cfa580b4fdd33ef2e9.png

b7977b69797b46cea515dc14a9a9f8f1.png

优化界面

    //优化代码:让界面不在那么突兀
    setWindowTitle("考试已用时:0分0秒");

最终代码

//examdialog.cpp
#include "examdialog.h"
ExamDialog::ExamDialog(QWidget *parent):QDialog(parent)
{
    //优化代码:让界面不在那么突兀
    setWindowTitle("考试已用时:0分0秒");
    // 调用初始化计时器
    initTimer();
}
void ExamDialog::initTimer()
{
    m_timeGo = 0;   //开始的考试时间为0
    m_timer = new QTimer(this);
    m_timer->setInterval(1000); //设置一秒钟触发一次
    m_timer->start();//启动计时器
    //我们想要做得事情是:刷新这个考试窗口用时。//让两者联系起来,也即信号与槽。
    //参数一:发送信号的对象 参数二:发送什么信号、参数三:响应信号的对象 参数四:执行的槽方法
    connect(m_timer,SIGNAL(timeout()),this,SLOT(freshTime()));  // timeout()是系统自带的,freshTime()需要自己写。
    //去头文件examdialog.h 添加 相应的槽方法
}
void ExamDialog::freshTime() //添加私有的一个槽方法
{
    //刷新考试用时
    m_timeGo++; //每一调用刷新窗口的方法都代表有一秒钟过去了,所以我们的考试用时每次都要+1
    //计算时间,为了设置标题显示
    QString min = QString::number( m_timeGo/60);//number() 方法会将计算的数字转换成 QString字符串格式
    QString sec = QString::number( m_timeGo%60);
    setWindowTitle("考试已用时:"+min+"分"+sec+"秒");//设置窗口标题:多少分多少秒
}

下一篇预告

驾校科目一考试系统——布局题库

目录
相关文章
|
6月前
|
小程序 JavaScript Java
座位预约|座位预约小程序|基于微信小程序的图书馆自习室座位预约管理系统设计与实现(源码+数据库+文档)
座位预约|座位预约小程序|基于微信小程序的图书馆自习室座位预约管理系统设计与实现(源码+数据库+文档)
126 0
|
6月前
11驾校科目一考试系统——发布项目
发布项目   当我们编写完项目之后就需要发布项目 。就需要发布项目了。一般发布项目的话我们会把所有需要的文件都放在一个文件夹里面,这样的话就更方便。有时候文件过多的话,有可能会有很多的子文件夹,我们先把功能工作目录设置一下,因为当前的工作目录是debug或者release,导致咱们在读取数据文件的时候需要相对路径的话还需要上一级目录去寻找。如下图所示。
40 1
|
6月前
07——驾校科目一考试系统——布局题库
如果需要题库的资料(exam.txt)可以留下邮箱,博主会发给大家的。 总代码
122 1
|
6月前
|
设计模式
03——驾校科目一考试系统——登录界面(2)
运行项目——成功添加背景图 缺点:背景图片盖住了登录界面。
103 2
|
6月前
|
设计模式 数据安全/隐私保护
03——驾校科目一考试系统——登录界面(1)
双击ui文件进入设计模式。 想要把我们的登录窗口做成什么样的效果呢?理想效果图如下所示:用户需要一个账号和密码输入。最后还需要给用户两个按钮:一个登录按钮,一个取消按钮。
133 2
|
6月前
|
设计模式 编译器 C语言
|
小程序 容器
幼儿园核酸预约登记小程序实战开发(下篇)
我们上篇介绍了核酸检测小程序的需求分析及数据源设计,本篇我们介绍一下如何开发具体的功能。
幼儿园核酸预约登记小程序实战开发(下篇)
|
存储 小程序 数据库
幼儿园核酸预约登记小程序实战开发(上篇)
本篇以一个现实中的实际场景,核酸预约登记为例,讲解如何通过低代码工具来快速的开发一款小程序。介绍了需求分析的方法,如何做数据库设计,以及低码开发关键的开发步骤。案例详实,操作步骤丰富,适合零基础又想自己搭建小程序的同学学习参考。
幼儿园核酸预约登记小程序实战开发(上篇)