【Qt】Qt定时器

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】Qt定时器.rar

© 版权声明
THE END
喜欢就支持一下吧
点赞388 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容