首先区别三个类:
QTimerEvent类: 描述一个定时器事件
QTimer类: 是一个定时器类(编程中大多使用这个设定定时器)
QTime类: 是一个时间类,主要用于对时间的操作,他提供了大量的函数便于用户对时间进行转换和计算。
开启一个定时器:
int QObject::startTimer(int interval)
参数说明:
返回值:一个整型编号,代表这个定时器
参数interval:一个以毫秒为单位的整数,表明设定的时间。
QTimer类的使用分为三步:创建对象、连接signal和slot函数、start()
1. QTimer *timer = new QTimer(this);
2. connect(timer, &SIGNAL(timeout(), this, SLOT(update()));
3. timer->start(1000);
其中,SIGNAL(timeout())表示:每当计时结束,计时器归零并重新计时,并发送一个信号激活slot函数。溢出信号
而 timer->start(1000);当中的1000,就是1000毫秒的意思,表示每次timeout的时间间隔是1000ms
QTime Class
QTime 提供时间函数给用户使用,它和QTimer的区别就和手表与秒表的区别一样。
举个栗子:
在Widget上添加一个LCD Number部件,显示当前时间:
widget.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTime>
#include <QTimerEvent>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void timeUpdate();//槽函数。及时结束之后应该做什么
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QTime>
#include <QTimer>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
QTimer *timer = new QTimer(this); //创建定时器对象
connect(timer,&QTimer::timeout, this, &Widget::timeUpdate);//定时器溢出信号和槽函数关联
timer->start(1000); //设置溢出时间,并且启动定时器
}
Widget::~Widget()
{
delete ui;
}
void Widget::timeUpdate() //定时器溢出处理
{
QTime time = QTime::currentTime(); //获取当前时间
QString text = time.toString("hh:mm"); //转换为字符串
if(time.second()%2 == 0) //每隔一秒。:变为空格。(使得:展示闪烁的效果)
text[2] = ' ';
ui->lcdNumber->display(text); //将字符串显示到lcd Number上
}
随机数:
如何产生随机数:
使用qsrand() 和 qrand() 两个函数。
qsrand(QTime(0,0,0).secsTo::currentTime());//表示从零点到当前时刻所经过的秒数。防止产生相同的随机数
int num = qrand()%100;//产生一个100以内的随机数
qsrand()是为了使每次运行程序产生的随机值都不一样。
比如:
如果不使用qsrand()函数,第一次运行程序产生的随机值是5, 9, 4, 1,7,0…
然后第二次,第三次,往后每一次产生的随机数都是5,9,4,1,7,0…