Qt定时器QBasicTimer、startTimer、QTimer使用总结

  1. QBasicTimer
    这个定时器类是一个 轻量级的、较底层的、被Qt内部使用的定时器类。如果在你的应用程序中使用定时器类,推荐使用QTimer类,而不是这个类。该类和QTimer类类似,也提供start、isActive、stop函数接口。该类的对象不支持复制,即没有拷贝构造函数和赋值函数,但支持移动语义,所以可以在支持移动语义的容器(如:std::vector)中维护该类对象的列表。Qt官方自带的例子
    Examples\Qt-XX.XX.XX\widgets\widgets\wiggly
    工程讲解了该定时器类的用法(Example在Qt的安装目录下,其中XX.XX.XX为Qt的版本号,如:5.14.1)。
  2. startTimer
    该函数是QObject类的函数。启动一个定时器并返回该定时器基于整形的定时器id。其有如下两个重载函数:
int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer)
int QObject::startTimer(std::chrono::milliseconds time, Qt::TimerType timerType = Qt::CoarseTimer)

当调用startTimer后,每隔interval毫秒(第1个函数)或time(第2个函数)就会发送一个定时器事件,直到 killTimer函数被调用才停止发送。如果interval或time为0,则每次当系统中再也没有其它事件即当事件队列中的事件全部处理完时才会发送一次定时器事件。当定时器事件发生时,QOjbect或其子类可以在虚函数timerEvent中捕捉定时器事件,timerEvent函数的参数就是QTimerEvent对象即定期是事件对象。如果有多个定时器正在运行,可以用 QTimerEvent::timerId()找出哪个是正在激活使用的定时器。

 class MyObject : public QObject
  {
      Q_OBJECT

  public:
      MyObject(QObject *parent = nullptr);

  protected:
      void timerEvent(QTimerEvent *event) override;
  };

  MyObject::MyObject(QObject *parent)
      : QObject(parent)
  {
      startTimer(50);     // 50-millisecond timer
      startTimer(1000);   // 1-second timer
      startTimer(60000);  // 1-minute timer

      using namespace std::chrono;
      startTimer(milliseconds(50));
      startTimer(seconds(1));
      startTimer(minutes(1));

      // since C++14 we can use std::chrono::duration literals, e.g.:
      startTimer(100ms);
      startTimer(5s);
      startTimer(2min);
      startTimer(1h);
  }

  void MyObject::timerEvent(QTimerEvent *event)
  {
      qDebug() << "Timer ID:" << event->timerId();
  }

注意:定时器的精度依赖于操作系统和硬件。timerType参数可以用来自定义定时器精度,具体可以查看Qt assist对Qt::TimerType 枚举的描述。大部分的平台支持20ms的精度,如果Qt不能提供指定要求的定时器事件,则它会默默地丢弃一些定时器事件。
3. QTimer
这个是比较高端的定时器类,建议大家用这个。这个应该是大家用的比较多的了,故在此不再详述,请参考Qt assist中的说明。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值