Qt中的QTimer类

QTimer 是 Qt 框架提供的一个定时器类,它基于 QObject 的事件循环机制,可以周期性地或单次地触发超时事件,从而方便地实现延时操作或周期性任务。

主要特性

  • 简单易用 :通过信号与槽机制,当定时器超时时会发出 timeout() 信号,连接该信号即可执行自定义操作。

  • 两种模式

    • 单次触发(single-shot):定时器仅触发一次,然后自动停止。

    • 多次触发:定时器按照设定的时间间隔持续触发,直到手动停止。

  • 精度:依赖于系统时钟和 Qt 事件循环的调度,通常情况下精度足够满足大多数应用需求(如动画、界面刷新、非实时数据采集)。对于高精度实时任务,可能需要更底层的计时器。

  • 线程亲和性QTimer 属于创建它的线程,必须在该线程的事件循环中运行。如果在非 GUI 线程使用,需要确保该线程已启动事件循环(QThread::exec())。

常用方法

方法 说明
start(int msec) 启动或重启定时器,间隔为 msec 毫秒。
start() 使用当前设置的间隔启动定时器。
stop() 停止定时器。
setInterval(int msec) 设置定时器的时间间隔(毫秒)。
int interval() const 返回当前设置的间隔。
setSingleShot(bool singleShot) 设置是否为单次触发模式。默认为 false(重复触发)。
bool isSingleShot() const 返回是否为单次模式。
bool isActive() const 返回定时器是否正在运行。
static void singleShot(int msec, const QObject *receiver, const char *member) 静态方法,创建一个单次定时器,超时后调用指定对象的成员函数(槽)。

意事项

  • 事件循环依赖QTimer 依赖所在线程的事件循环。如果线程没有事件循环(如未调用 exec()),定时器将无法触发。

  • 精度:定时器的实际触发时间可能会因为事件队列中其他任务的阻塞而延迟。不适用于硬实时要求。

  • 多线程 :在不同线程中使用 QTimer 时,必须确保定时器对象属于目标线程,并且该线程有事件循环。通常通过将定时器移动到工作线程(moveToThread)实现。

  • 资源释放:当父对象被销毁时,定时器会自动停止并销毁。如果创建时不指定父对象,需手动管理。

相关推荐
0xDevNull4 小时前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
小小亮014 小时前
Next.js基础
开发语言·前端·javascript
ALex_zry4 小时前
C++网络编程心跳机制与连接保活:长连接稳定性保障
开发语言·网络·c++
Amumu121385 小时前
Js:正则表达式(二)
开发语言·javascript·正则表达式
Sgf2275 小时前
ES8(ES2017)新特性完整指南
开发语言·javascript·ecmascript
好大哥呀5 小时前
C++ Web 编程
开发语言·前端·c++
ID_180079054736 小时前
小红书笔记评论 API,Python 调用示例与完整 JSON 返回参考
java·开发语言
南境十里·墨染春水7 小时前
C++ 笔记 友元(面向对象)
开发语言·c++·笔记
TT_44197 小时前
python程序实现图片截图溯源功能
开发语言·python
笨笨饿7 小时前
20_Git 仓库使用手册 - 初学者指南
c语言·开发语言·嵌入式硬件·mcu·学习