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

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

相关推荐
在繁华处4 小时前
Java从零到熟练(四):面向对象基础
java·开发语言
Unbelievabletobe4 小时前
解决了股票api接口盘后数据更新慢的问题
大数据·开发语言·python
不会C语言的男孩5 小时前
C++ Primer 第2章:变量和基本类型
开发语言·c++
在繁华处6 小时前
Java从零到熟练(三):流程控制
java·开发语言·python
云泽8087 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
星恒随风8 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
888CC++8 小时前
java 并发编程
java·开发语言·python
罗超驿8 小时前
18.Web API 实战:元素与表单属性的获取和修改
开发语言·前端·javascript
被子你放开我9 小时前
CRMEB PHP多商户升级4.0太麻烦了
开发语言·php
阿里嘎多学长9 小时前
2026-06-01 GitHub 热点项目精选
开发语言·程序员·github·代码托管