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)实现。

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

相关推荐
懂点Tech4 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
云和数据.ChenGuang4 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
美狐美颜SDK开放平台5 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04245 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘566 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅6 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅7 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
bkspiderx8 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信
小王C语言8 小时前
Qt常用控件:输入类控件,单行/多行输入框、下拉框、(日期)微调框、旋钮、滑动条
开发语言·qt
ESDWAN8 小时前
SD-WAN 主备切换为什么仍然会断网?从检测机制到会话恢复分析
开发语言·php