Qt多种定时器

介绍Qt的三种定时器QObject内置定时器,QBasicTimer,QTimer。

QObject内部定时器

  使用startTimer开启定时器,使用killTimer(int id)接口来关闭指定的定时器。 启动定时器后会在对应间隔时间触发timerEvent事件。 示例:

class Object : public QObject {
    Q_OBJECT
public:
    Object()
    {
        startTimer(1000);
    }
    
protected:
    void timerEvent(QTimerEvent *event) { }
};

QBasicTimer

QBasicTimer类为对象提供定时器事件。

  QBasicTimer特点快速、轻量级和低级类。对于需要降低使用多个定时器开销的应用程序,QBasicTimer可能是一个不错的选择。如果是一般使用情况建议使用更高级别的QTimer类而不是此类。

  使用start接口来设置定时时间与定时事件的接收对象。 示例:

class Object : public QObject {
    Q_OBJECT
public:
    Object() { }

protected:
    void timerEvent(QTimerEvent *event) { }
}
Object object;
QBasicTimer basicTimer;
basicTimer.start(500, &object);

QTimer

QTimer类提供重复和单次定时器。   QTimer类为定时器提供高级编程接口。创建一个QTimer实例,将其timeout()信号连接到对应的槽中,然后调用start()开启定时器,每隔一段时间会发出timeout()信号。 示例:

class Object : public QObject {
    Q_OBJECT
public:
    Object()
    {
        connect(&m_timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
        m_timer.start(1000);
    }

private slots:
    void onTimeout() { }

private:
    QTimer m_timer;
};

定时器小知识

  • 需要不同时间精度的定时器,可以指定定时器的TimerType类型。

Qt::TimerType

解释

Qt::PreciseTimer

精确的定时器试图保持毫秒精度

Qt::CoarseTimer

粗略的定时器试图将精度保持在所需间隔的5%以内

Qt::VeryCoarseTimer

非常粗略的定时器

特别地Qt::VeryCoarseTimer非常粗略的意思是精度为±500ms。例如,10500ms的间隔将四舍五入为11000ms,而10400ms会置为10000ms。

  • 上述定时器例子都为循环触发,需要停止定时器请使用stop或killTimer,而想使用单次定时器最好使用QTimer::singleShot接口。
  • 使用QObject::timerEvent捕获定时器事件,如果存在多个定时器源,可以使用timerId来判断确定那个定时器事件。
  • 如果系统忙或无法提供请求的准确性,所有定时器类型都有可能会比预期的时间晚超时。在这种晚超时的情况下,虽然是多个超时已经过期,但是只发出一次超时事件。
  • QTimer的remainingTime接口可以获得距离触发定时器事件的剩余时间。
  • 使用QObject的startTimer需要注意的是每调用一次会新增一个定时器并返回一个定时器ID。
id1 = startTimer(1000); // 开启一个1秒定时器,返回其定时器ID
id2 = startTimer(2000); // 开启一个2秒定时器,返回其定时器ID
id3 = startTimer(3000); // 开启一个3秒定时器,返回其定时器ID
  • Qt官方使用定时器的例子可以参考Analog Clock Example。

本文分享自微信公众号 - Qt君(qtjuna),作者:Prosa

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 总结if/elif/else/endif宏之间的嵌套关系

    Qt君
  • 为Qt程序获取编译日期时间

    Qt君
  • Qt单次定时器

    使用定时器QTimer的singleShot静态接口实现单次定时器,实现更简洁,推荐使用。

    Qt君
  • FreeRTOS 软定时器实现

    考虑平台硬件定时器个数限制的, FreeRTOS 通过一个 Daemon 任务(启动调度器时自动创建)管理软定时器, 满足用户定时需求. Daemon 任务会在...

    orientlu
  • liteos软件定时器(十)

    软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器,当经过设定的Tick时钟计数值后会触发用户定义的回调函数。定时精度与系统Tick时钟的周期有关。

    233333
  • 18.5.13日报

    1,找到帧率低的原因了,wkeWake里做的帧率限制。打开后,并且调整每帧的sleep之类,帧率基本和chrome差不多

    龙泉寺扫地僧
  • 基于Linux内核的时间轮算法设计实现【附代码】

    对于一个复杂的软件系统,定时器的对任务的管理和调度至关重要,通常定时器的管理已成为一个复杂系统的重要基础设施。

    孙玄@奈学教育
  • 一起来学matlab-matlab学习笔记7-定时器

    本文为matlab自学笔记的一部分,之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的,非常重要的软件。也许最近其带来的一些负面...

    DrawSky
  • uCOS | 软件定时器

    硬件定时器是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中...

    飞哥
  • 单片机捕捉功能

    输入捕捉:具有此功能的一个管脚,定时器在内部时钟的作用下在运行,此时管脚来了个中断,假如上升沿吧。在中断的作用下,定时器停止工作,此时可以读出定时器的数值,读出...

    用户4645519

扫码关注云+社区

领取腾讯云代金券