【Qt】Qt定时器
程序员文章站
2024-03-22 18:55:52
...
00. 目录
01. 概述
QTimerEvent类用来描述一个定时器事件。
Qt中有两种方法来使用定时器,一种是定时器事件,另一种是使用信号和槽。一般使用了多个定时器时最好使用定时器事件来处理。
02. 开发环境
Windows系统:Windows10
Qt版本:Qt5.15或者Qt6
03. 定时器事件
3.1 新建Qt Widgets应用,项目名称为7Timer,基类选择QWidget,类名为Widget。
3.2 widget.h文件中添加函数声明:
protected:
void timerEvent(QTimerEvent *event);
3.3 添加私有变量
private:
int id1;
int id2;
int id3;
3.4 .下面到设计模式,向界面上拖入两个标签部件Label
3.5 进入widget.cpp文件,先在构造函数中添加如下代码
//启动3个定时器 返回定时器ID
id1 = startTimer(1000);
id2 = startTimer(2000);
id3 = startTimer(10000);
这里开启了三个定时器,分别返回了它们的id,这个id用来区分不同的定时器。定时器的时间单位是毫秒。每当一个定时器溢出时,都会调用定时器事件处理函数,我们可以在该函数中进行相应的处理。
3.6 实现定时器事件处理函数
//定时器事件
void Widget::timerEvent(QTimerEvent *event)
{
//判断是哪个定时器超时
if (event->timerId() == id1)
{
ui->label->setText(tr("%1").arg(qrand() % 10));
}
else if (event->timerId() == id2)
{
ui->label_2->setText(tr("定时器2"));
}
else
{
qApp->quit();
}
}
使用timerId()函数返回了溢出的定时器的id,然后根据该id来判断是哪个定时器溢出了,并进行相应的处理。每当第一个定时器溢出时都产生一个小于10的随机数;当第二个定时器溢出时,就更改标签的文本;当第三个定时器溢出时则退出应用程序。
04. 定时器信号
如果只是想开启少量的定时器,也可以使用信号和槽来实现。
4.1 先在widget.h中添加一个私有槽声明
private slots:
void timerUpdate();
4.2 widget.cpp中添加头文件
#include <QTimer>
#include <QDateTime>
4.3 在构造函数中添加如下代码
QTimer *timer = new QTimer(this);
//关联定时器溢出洗好和响应的槽函数
connect(timer, &QTimer::timeout, this, &Widget::timerUpdate);
//启动定时器
timer->start(1000);
4.4 实现timerUpdate()函数
void Widget::timerUpdate()
{
QString str;
//获取系统当前时间
QDateTime time = QDateTime::currentDateTime();
//设置系统时间显示格式
str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
ui->lineEdit->setText(str);
}
4.5 执行结果
05. 附录
源码下载:
下一篇: Qt / 定时器