欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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 执行结果
【Qt】Qt定时器

05. 附录

源码下载: