学了两天的QT界面,今天老师布置了作业让我们用QT做一个简单的单人答题界面
类似微信应用里的头脑王者,每十秒答一题,一共答5题,最后输出分数。
下面是我自己的步骤、界面及程序:(尽量从简的)
首先打开QT ,新建一个应用程序
创建完成以后创建设计师界面类
在界面中插入倒计时用的时间(lcdNumber),切换页面用的窗口(stacked widget),所需文本(Label)等等。
大致是这样,然后在Stacked widget 添加页面,界面同理。
接下来是代码
首先在头文件中加入容器,存放单选题,加一个时间参数
main函数不动,在widget中代码如下:
#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
#include <QMovie>
#include <QDebug>
#include <QMessageBox>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
v.push_back(ui->radioButton_5); //先预设5个答案
v.push_back(ui->radioButton_11);
v.push_back(ui->radioButton_14);
v.push_back(ui->radioButton_17);
v.push_back(ui->radioButton_8);
ui->lcdNumber->display(10); //初始数字为10
//ui->progressBar->setValue(100);
timerId = startTimer(1000); // 1s
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *event)
{
static int i = 1;
static int k = 0; //计数器
int score = 0; //得分
ui->lcdNumber->display(ui->lcdNumber->value() - 1); //时间递减
if (ui->lcdNumber->value() == 0) //0s时
{
k++; //计数+1
ui->lcdNumber->display(10); //时间回10s
ui->stackedWidget->setCurrentIndex(i++); //Stack widget切下一页
}
for (unsigned int i = 0; i< v.size(); i++)
{
if (v[i]->isChecked()) //选项正确时
score++; //分数+1
}
if(k == 5) //当走完5次时 输出
{
QString str = QString("恭喜!您答对了 %1 题!").arg(score);
QMessageBox::information(this, "得分", str);
killTimer(this->timerId); //停止时间
}
}
最后运行如下: