QTimer类

Qt之单次定时器 Qt之单次定时器概述:代码示例:实现一实现二实现三over:文末一句话: 概述: 1. 下面我们用三种实现方式吧,来实现定时器的单次触发; 代码示例: 实现一 使用QTimer的 setSingleShot 接口实现单次定时器。 QTimer *pTimer = new QTimer(this); connect(pTimer,SIGNAL(timeout()),this,SLOT(slot_Timerout())); pTimer->setSingleShot(true) 阅读详情

QTimer 类提供重复和单次计时器。


Header:#include <QTimer>
CMake:find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake:QT += core
Inherits:< QObject

【详细说明】

QTimer 类为计时器提供高级编程接口。使用时请先创建一个 QTimer,将其 timeout() 信号连接到相应的槽函数,然后调用 start(),此时,它将以恒定的间隔发出 timeout() 信号。

示例:一秒(1000 毫秒)计时器:

QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, QOverload<>::of(&AnalogClock::update));
timer->start(1000);
从此时,程序每秒调用一次槽函数。用户可以通过  setSingleShot(true) , 将计时器设置为仅超时一次。您还可以使用 static 函数  QTimer::singleShot()  在指定的时间间隔后调用槽:
 QTimer::singleShot(200, this, &Foo::updateCaption);

在多线程应用程序中,可以在任何具有事件循环的线程中使用 QTimer。

要从非 GUI 线程启动事件循环,请使用 QThread::exec()。

Qt使用线程亲和关系来确定哪个线程将发出timeout() 信号。因此,必须在其线程中启动和停止计时器,无法从另一个线程启动计时器。

作为特殊情况,“零计时器”也可用于完成一些工作,同时提供快速的用户界面:

QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &Foo::processOneThing);
timer->start();

引时,处理过程processOneThing() 将被反复调用并快速返回(通常是在处理一个数据项之后),这样Qt就可以将事件传递到用户界面,并在它完成所有工作后停止计时器。

这是GUI应用程序中实现繁重工作的传统方法,但是随着多线程在越来越多的平台上可用,我们期望零毫秒QTimer对象将逐渐被QThreads所取代。

★ 定时器精度

计时器的准确性取决于底层操作系统和硬件。大多数平台都支持 1 毫秒的分辨率,尽管在许多实际情况下,计时器的精度不会等于此分辨率。

精度还取决于计时器类型  Qt::PreciseTimer,QTimer 将尝试将精度保持在 1 毫秒。

对于 Qt::CoarseTimer 和 Qt::VeryCoarseTimer 类型,QTimer可能会比预期更早唤醒。

★ QTimer 的替代品

使用 QTimer 的另一种方法是为您的对象调用 QObject::startTimer() ,并在您的类中重新实现 QObject::timerEvent()  事件处理程序(必须继承 )。timerEvent() 的缺点是不支持单次定时器或信号等高级功能。

另一种选择是 QBasicTimer,它通常比直接使用 QObject::startTimer() 更省事。

某些操作系统限制了可以使用的计时器数量,Qt 将试图绕过这些限制。

参见: QBasicTimer, QTimerEvent, QObject::timerEvent(), Timers, and Analog Clock.


【属性】

active : bool

如果计时器正在运行为真;否则为假。

interval : int

此属性保存以毫秒为单位的超时间隔。默认值为0。

remainingTime : const int

此属性保存剩余时间(以毫秒为单位)

返回超时前计时器的剩余值(毫秒)。如果计时器处于非活动状态,返回值将为-1。如果计时器超时,返回值将为0。

singleShot : bool

此属性保存计时器是否为单次计时器。

单次计时器仅触发一次,默认值为false。

timerType : Qt::TimerType

控制计时器的精确度。

【公有函数】

QTimer(QObject *parent = nullptr)
virtual~QTimer()
QBindable<bool>

bindableActive()

返回计时器是否正在运行。
QBindable<int>

bindableInterval()

返回计时器超时间隔。
QBindable<bool>

bindableSingleShot()

返回是否是单次计时器。
QBindable<Qt::TimerType>

bindableTimerType()

返回计时器精度枚举。
QMetaObject::Connection

callOnTimeout(Functor &&slot)

创建从计时器的 timeout()信号到指定slot的连接。返回连接的句柄。

这相当于调用:QObject::connect(timer, &QTimer::timeout, timer, slot, Qt::DirectConnection);

QMetaObject::Connection

callOnTimeout(const QObject *context, Functor &&slot, Qt::ConnectionType connectionType = Qt::AutoConnection)

重载。创建一个从timeout()信号到指定slot的连接,并放在特定的事件循环context中,返回该连接的句柄。

相当于调用:QObject::connect(timer, &QTimer::timeout, context, slot, connectionType)

intinterval() const
返回interval属性保存的以毫秒为单位的超时间隔。
std::chrono::millisecondsintervalAsDuration() const
以标准库std::chrono::milliseconds形式,返回此计时器的时间间隔。
bool

isActive() const

如果计时器正在运行(挂起),则返回true否则返回false。
bool

isSingleShot() const

是否为单次计时器
int

remainingTime() const

返回剩余时间。
std::chrono::milliseconds

remainingTimeAsDuration() const

以标准库std::chrono::milliseconds形式,返回计时器对象中的剩余时间。
voidsetInterval(int msec)
设置以毫秒为单位的超时间隔msec。
voidsetInterval(std::chrono::milliseconds value)
以标准库std::chrono::milliseconds形式,设置以毫秒为单位的超时间隔msec。
voidsetSingleShot(bool singleShot)
设置为单次计时器。
voidsetTimerType(Qt::TimerType atype)
以Qt::TimerType枚举值设置计时器。
void

start(std::chrono::milliseconds msec)

以启动或重新启动计时器。如果计时器已经在运行,它将stopped 并重新启动。如果singleShot为真,计时器将仅被激活一次。这相当于:

timer.setInterval(msec);
timer.start();

注意:零计时器会让事件循环忙碌,可能导致麻烦和UI的高度不稳定行为。

int

timerId() const

如果计时器正在运行,则返回计时器的ID;否则返回-1。
Qt::TimerType

timerType() const

返回当前计时器精度的枚举值。

Qt::PreciseTimer        努力保持毫秒级精度

Qt::CoarseTimer        粗糙精度,允许 5%误差

Qt::VeryCoarseTimer        非常粗糙精度,只能保持秒级精度


【公有槽函数】

void

start(int msec)   

以msec毫秒的时间隔启动或重新启动计时器。如果计时器已经在运行,它将stopped 并重新启动。如果singleShot为true,计时器将仅激活一次。这相当于:

注意:用一个零计时器来保持事件循环繁忙,一定会导致麻烦和UI的高度不稳定行为。

void

start()

重载。按照间隔interval中指定的超时时间启动或重新启动计时器。 【其余同上】
void

stop()

停止计时器。

【信号】

void

timeout()

这个信号在计时器每次时间结束时发出。

【静态公有成员】

voidsingleShot(Duration msec, const QObject *context, Functor &&functor)
voidsingleShot(Duration msec, Qt::TimerType timerType, const QObject *context, Functor &&functor)
voidsingleShot(Duration msec, Functor &&functor)
voidsingleShot(Duration msec, Qt::TimerType timerType, Functor &&functor)

上面几个静态函数在msec毫秒后调用。

此函数非常方便,因为不需要创建本地对象 QTimer或timerEvent 。

如果指定context,则仅当对象在间隔发生之前未被销毁时,才会调用 。

msec参数可以是int 或 std::chrono::milliseconds 值。

注意:此函数是 reentrant。

voidsingleShot(int msec, const QObject *receiver, const char *member)

这个静态函数在给定的时间间隔后调用一个槽函数。

使用这个函数非常方便,因为您不需要使用timerEvent或者创建一个本地的QTimer对象。

​

该示例程序在10分钟(600000毫秒)后自动终止。

receiver是接收对象,member 就是槽函数。

注意:此函数是 reentrant。

voidsingleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member)
重载。与上面不同的是提供了一个timerType,用来指定计时精度。
voidsingleShot(std::chrono::milliseconds msec, const QObject *receiver, const char *member)
重载。与上面不同的是给出时间的方式 std::chrono::milliseconds。
voidsingleShot(std::chrono::milliseconds msec, Qt::TimerType timerType, const QObject *receiver, const char *member)
重载。与上面不同的是提供了一个timerType,用来指定计时精度。

【重新实现的保护成员】

virtual void

timerEvent(QTimerEvent *e) override

重新实现的QObject::timerEvent(QTimerEvent *event),用于接收对象的计时器事件

<<<返回根页面 

Qt定时器类QTimer 阅读详情

相关推荐

QT定时器之QTimer类加QTime类制作秒表

一、QTime时间类 QTime类提供时钟时间函数。 QTime对象包含一个时钟时间,即从午夜开始的小时、分钟、秒和毫秒数。它可以从系统时钟中读取当前时间,并测量运行时间的跨度。它提供了比较时间和通过添加若干毫秒来操作时间的函数。QTime使用24小时时钟格式;它没有上午/下午的概念 1. 头文件 #include <QTime> 2. QTime QTime::addMSecs(int ms) const 返回一个QTime对象,该对象的时间比该对象的时间晚ms毫秒(如果ms为负,则早ms

one goto one 的博客 5452

Qt之setSingleShot 单次定时器的实现方法

【代码】Qt之setSingleShot单次定时器的实现方法。

my_angle2016的博客 4506

Qt | QTimer 类(计时器)

QTimer 类是 QObejct 的直接子类,该类用于实现计时器,QTimer 类未继承自 QWidget因此该类的对象没有像 QWidget 一样,有一个可见的窗口。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 1451

qt定时器

背景: 在实际中 1.我们往往需要给执行某个业务请求设置等待时间(超时时间),eg:网络请求数据包、进度条等; 2.需要定时执行每个任务,eg钟表每天定时报时,就想人每天12:00吃中午饭,大脑给身体设置的定时任务; 3.有些事情需要特定的时间执行,eg:笔者明天早上需要五点起床,赶第一班航班去某个地方,那当然起码得设置一个两点左右的闹钟,不至于误机; 这些看起来简单的事情其实映射到程序世界来都需要定时看护,那定时器,是一个不错的选择; #include "mainwindow.h" #in

qq_27344469的博客 1294

QT的QTimer类的使用

详细说明 QTimer类提供重复和单次计时器。 QTimer类为计时器提供了高级编程接口。要使用它,请创建一个QTimer,将其timeout()信号连接到适当的插槽,然后调用start()。从那时起,它将以固定的时间间隔发出timeout()信号。 一秒(1000毫秒)计时器的示例(来自“模拟时钟”示例): QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1144

如何快速学习 PHP 编程:从入门到实战的高效路径

PHP高效学习路线摘要:4-8周掌握Web开发核心技能。阶段1(1周)搭建XAMPP/MAMP环境,掌握基础语法和变量处理;阶段2(2周)重点学习表单处理、会话管理和PDO数据库操作(防SQL注入);阶段3(2-3周)实战开发个人博客等小项目。关键原则:边学边练(每个知识点配3-5个案例)、优先掌握Web刚需技能(HTTP请求、数据库、动态页面)、善用官方手册。避坑点:密码必须加密、SQL使用预处理、统一UTF-8编码。建议每天2-3小时实操,通过项目驱动学习,快速形成开发能力。

2501_94233638的博客 1387

QTimer类的使用

QTimer类提供了定时器信号和单触发定时器。 它在内部使用定时器事件来提供更通用的定时器。QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。 注意当QTimer的父对象被销毁时,它也会被自动销毁。 实例: QTimer *timer = n

xingyuan1hao的专栏 1831

dify工作流的原理

摘要: Dify 工作流是一个基于有向无环图(DAG)的智能任务编排系统,支持多节点(如LLM调用、API工具、条件分支等)的可视化拖拽与流程编排。其核心原理包括执行引擎(解析DAG并管理节点依赖)、上下文变量传递(类Jinja模板的变量引用机制)和状态持久化(存储执行日志与中间结果)。工作流通过事件驱动执行,支持异步任务调度,并与RAG知识库、LLM服务等模块深度集成,最终可发布为API或对话应用。技术栈基于Python(FastAPI+Celery)和PostgreSQL,实现低代码化的AI应用开发。

nbspzs的专栏 2187

QTimer类(转)

详细描述 QTimer类提供了定时器信号和单触发定时器。 [color=red]它在内部使用定时器事件来提供更通用的定时器。QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。[/color] 注意当QTimer的父对象被销毁时,它也会被自动销毁。 实例: ...

gaoya07080122的专栏 251

RT-Thread stm32h7使用串口DMA

stm32h7在rtthread中无法使用串口DMA,通过更改驱动代码使其支持串口DMA

qq_35141454的博客 2286

别再手动更新Excel了!用Jira看板管理你的个人项目(附保姆级配置流程)

本文详细介绍了如何利用Jira看板替代Excel进行个人项目管理,提供从注册到配置的保姆级教程。通过极简看板模式、自动化规则和数据分析功能,帮助用户实现任务可视化、协作高效化和提醒自动化,大幅提升个人工作效率。特别适合需要管理复杂个人项目的用户。

weixin_42699679的博客 229

Qt QTimer类

Header: #include CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) qmake: QT += core Inherits: QObject qmake: QT+=core 继承自:QObject 公有函数(Public Functions) QTimer(QObject *parent = nullptr); QTimer类的构造函数。 vi

代码海贼团船长的博客 1734

电子元器件基础:电阻、电容、电感的特性与应用解析

本文深入解析了电子元器件中电阻、电容和电感三大基础元件的核心特性、工作原理与选型应用。电阻作为电路中的‘交通警察’,控制电流与分配电压,其额定功率与精度是关键选型参数。文章结合实战经验,详细阐述了它们在电源滤波、信号处理及高频电路中的不同表现与避坑指南,是电子设计与维修的必备基础知识。

weixin_29213655的博客 377

Qt学习之定时器QTimer类编程

1 引言 在进行控制系统上位机编程时,我们经常需要用到定时器,在定时服务函数中执行控制动作或者显示数据等,编程时候使用到的类是QTimer类,我们要创建两个定时器,第一个定时器是在对话框的界面线程中创建的,他的定时事件在主循环中进行,而第二个定时器是在一个子线程中创建的,它的定时事件在子线程中循环,不受主线程其他事件的影响,我认为如果程序对于定时精度要求高的话,最好采用第二种设计方法,如果是诸如显示数据之类的对定时精度要求不高的动作,则可以采用第一种设计方法,更加省时省力。 2 准备工作 定时器需要用到QT

weixin_42411702的博客 6814

Spine换装系统深度优化:从局部换肤到动态合批的进阶之路

本文深入探讨了Spine换装系统的性能优化策略,从局部换肤到动态合批的进阶技术。通过分析传统方案的性能瓶颈,提出动态合批、GPU Instancing等高级优化方法,显著降低Draw Call和内存占用,提升游戏性能。适用于MMO和大型游戏开发,帮助技术美术和工程师突破大规模换装场景的性能限制。

vulkan6gpu的博客 554

别再只盯着时序了!聊聊SDC里那些容易被忽略的‘配角’命令:工作条件、线载模型与面积约束

本文深入探讨了SDC(设计约束)中常被忽视的关键命令,包括set_operating_conditions、set_wire_load_model和set_max_area。这些‘配角’命令在芯片设计中扮演着至关重要的角色,影响时序收敛、功耗和面积优化。文章通过实际案例和最佳实践,揭示了如何正确配置工作条件、选择线载模型以及动态调整面积约束,以提升设计质量和效率。

weixin_26875109的博客 208

QTimer类参考

主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数   QTimer类参考 QTimer类提供了定时器信号和单触发定时器。 详情请见…… #include qtimer.h> 继承了QObject。 所有成员函数的列表。 公有成员 QTimer ( QObject * parent = 0, const char * name = 0 )

wjeson的专栏 623

(14-3)值分布式算法:QR-DQN (Quantile Regression DQN)算法

QR-DQN(Quantile Regression DQN)是一种强化学习算法,它是深度 Q-网络(Deep Q-Network,DQN)的一个变种,旨在更好地处理值函数的不确定性。QR-DQN的实现步骤与传统的DQN类似,但在目标分布计算和损失函数方面有一些不同之处,这使得它能够更好地处理值函数的不确定性。QR-DQN(Quantile Regression DQN)算法的核心思想是将值函数表示为一个分布,而不是传统的单一值估计。在下面的内容中,将讲解一个使用QR-DQN算法的例子。

码农三叔 2053

QT学习 之QTimer类

这个是开启一个定时器的函数,他的参数interval是毫秒级别。创建一个QTimer实例,将其timeout()信号连接到相应的槽,然后调用start(),之后,它将以固定间隔发出timeout()信号。当定时器超时后,会进入该事件timerEvent函数,需要重写timerEvent函数,在函数中通过判断event->timerId()来确定定时器,然后执行某个定时器的超时函数。Qt中定时器的使用有两种方法,一种是使用QObject类提供的定时器,还有一种就是使用QTimer类。

xiaoqixiaoguai的博客 912

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

PyQt QTimer()类

dujuancao11的博客 588

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Qt中QTimer类的使用

首先 添加头文件: #include QTimer类的使用:创建一个QTimer的对象,使用start()来开始并且把它的timeout()信号连接到适当的槽,当这段时间过去了,它将会发射timeout()信号,与这个信号相连的槽就开始执行。当QTimer的父对象被销毁时,它也会被销毁。 参考使用: QTimer *timer = new QTimer(this); connect(tim...

耶律大石的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

QTimer类的介绍

构造函数//创建时可以指定父对象,便于内存管理创建好定时器就要启动定时器//指定时间间隔或者重启定时器,需要调用setInterval()设置时间间隔T定时器结束后会发出信号会自动使用timeout()定时器是可以设置精度的//QT::PreciseTimer//精确的精度//QT::CoarseTimer//默认的精度//QT::VeryCoarseTimer//粗糙的精度判断定时器正在运行 bool类型让定时器触发一次函数//判断定时器是只触发一次。

2401_87027686的博客 260

「QT」基础数据类 之 QTimer 定时器类

默认构造:创建一个没有父对象的QTimer实例。指定父对象构造:创建一个QTimer实例,并将其父对象设置为指定的QObject。这通常用于将QTimer添加到某个QWidget或QObject的子树中,以便自动管理其生命周期。设置和获取间隔:设置定时器的间隔时间(毫秒)。:获取定时器的间隔时间。启动和停止定时器:启动定时器。如果msecs不为0,则设置新的间隔时间并启动定时器;如果为0,则使用之前设置的间隔时间。:停止定时器。单次和重复模式:设置定时器是否为单次触发。如果为true。

何曾参静谧的博客 1458

Qt中的Qtimer类详解

QTimer类参考<br />QTimer类提供了定时器信号和单触发定时器。 详情请见……<br />#include <qtimer.h ><br />继承了QObject 。 <br />所有成员函数的列表。公有成员QTimer ( QObject * parent = 0, const char * name = 0 )~QTimer ()bool isActive () constint start ( int msec, bool sshot = FALSE )void cha

wykwdy007的专栏 4305
上一篇: QAbstractAnimation类
下一篇: QEvent类
floatbit
博客等级 码龄24年 460粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值