? ? ? ? 《Qt6 C++开发指南》
4.8QTimer和QElapsedTimer_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1km4y1k7CW?p=32&vd_source=9f6a57780f9760d9cdd025dbc388f3ba
????????QTimer 是软件定时器,其父类是 QObject。QTimer 的主要功能是设置以毫秒为单位的定时周期,然后进行连续定时或单次定时。
????????QElapsedTimer 用于快速计算两个事件的间隔时间,是软件计时器。QElapsedTimer 没有父类,其计时精度可以达到纳秒级。
? ? ? ? QTimer 的父类是 QObject,支持 Qt 的元对象系统。所以,QTimer 虽然不是一个界面组件类, 但是它也有属性、信号和槽。
QTimer 类的主要属性
属性 | 属性值类型 | 功能 |
interval
| int | 定时周期,单位是毫秒 |
singleShot | bool |
定时器是否为单次定时,true
表示单次定时
|
timerType | Qt::TimerType |
定时器精度类型
|
active | bool |
只读属性,返回 true
表示定时器正在运行,也就是运行
start()
函数启动了定时器
|
remainingTime | int |
只读属性,到发生定时溢出的剩余时间,单位是毫秒。若定时器未启动,属性值
为
?1
,若已经发生定时溢出,属性值为
0
|
timerType表示定时器的精度,void QTimer::setTimerType(Qt::TimerType atype)参数 atype 是枚举类型 Qt::TimerType,有以下几种枚举值,默认值是 Qt::CoarseTimer。? Qt::PreciseTimer:精确定时器,精度尽量保持在毫秒级。? Qt::CoarseTimer:粗糙定时器,定时误差尽量在定时周期值的 5%以内。? Qt::VeryCoarseTimer:非常粗糙的定时器,精度保持在秒级。
QTimer 有几个公有槽函数用于启动和停止定时器,其函数原型定义如下:void QTimer::start() //启动定时器void QTimer::start(int msec) //启动定时器,并设置定时周期为 msec,单位是毫秒void QTimer::stop() //停止定时器
QTimer 只有一个 timeout() 信号,其原型定义如下:??????? ?void QTimer::timeout()要对定时溢出事件进行处理,需要编写一个槽函数与 timeout() 信号关联。
????????QTimer 有一个静态函数 singleShot() ,用于创建和启动单次定时器,并且将定时器的 timeout() 信号与指定的槽函数关联。这个函数有多种参数形式,其中一种函数原型定义如下:void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member)其中,参数 msec 是定时周期,单位是毫秒;timerType 是定时器精度类型;receiver 是接收定时器 的 timeout()信号的对象;member 是与 timeout()信号关联的槽函数的指针 。
????????QElapsedTimer 用于快速计算两个事件的间隔时间 , 它没有父类,不支持 Qt 的元对象系统 ,所以 只有接口函数 。
void start()? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//复位并启动计时器qint64 elapsed()? ? ? ? ? ? ? ? ? ? //返回流逝的时间,单位:毫秒qint64 nsecsElapsed() ????????//返回流逝的时间,单位:纳秒qint64 restart()? ? ? ? ? ? ? ? ? ? ? //重新启动计时器
? ? ? ? 详情请查看课本和视频