Qt定时器

1. 概述

QTimerEvent类用来描述一个定时器事件。

Qt中有两种方法来使用定时器,一种是定时器事件,另一种是使用信号和槽。一般使用了多个定时器时最好使用定时器事件来处理。

2. 开发环境

Windows系统:Windows10

Qt版本:Qt5.15或者Qt6

3. 定时器事件

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的随机数;当第二个定时器溢出时,就更改标签的文本;当第三个定时器溢出时则退出应用程序。

4. 定时器信号

如果只是想开启少量的定时器,也可以使用信号和槽来实现。

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开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值