第四章 QTimer和QElapsedTimer(读书)

发布时间:2024年01月18日

?参考:

? ? ? ? 《Qt6 C++开发指南》
4.8QTimer和QElapsedTimer_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1km4y1k7CW?p=32&vd_source=9f6a57780f9760d9cdd025dbc388f3ba


一、概述? ??

????????QTimer 是软件定时器,其父类是 QObjectQTimer 的主要功能是设置以毫秒为单位的定时周期,然后进行连续定时或单次定时。

????????QElapsedTimer 用于快速计算两个事件的间隔时间,是软件计时器。QElapsedTimer 没有父类,其计时精度可以达到纳秒级。


二、 QTimer类

? ? ? ? QTimer 的父类是 QObject支持 Qt 的元对象系统。所以,QTimer 虽然不是一个界面组件类, 但是它也有属性、信号和槽

1. 主要的属性和接口函数

QTimer 类的主要属性

属性属性值类型功能
interval
int定时周期,单位是毫秒
singleShotbool
定时器是否为单次定时,true 表示单次定时
timerTypeQt::TimerType
定时器精度类型
active bool
只读属性,返回 true 表示定时器正在运行,也就是运行 start() 函数启动了定时器
remainingTimeint
只读属性,到发生定时溢出的剩余时间,单位是毫秒。若定时器未启动,属性值
?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() //停止定时器

2.timeout()信号

QTimer 只有一个 timeout() 信号,其原型定义如下:
??????? ?void QTimer::timeout()
要对定时溢出事件进行处理,需要编写一个槽函数与 timeout() 信号关联。

?3.静态函数singleShot()

????????QTimer 有一个静态函数 singleShot() ,用于创建和启动单次定时器,并且将定时器的 timeout() 信号与指定的槽函数关联。这个函数有多种参数形式,其中一种函数原型定义如下:
void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member)
其中,参数 msec 是定时周期,单位是毫秒;timerType 是定时器精度类型;receiver 是接收定时器 的 timeout()信号的对象;member 是与 timeout()信号关联的槽函数的指针

三、 QElapsedTimer类?

????????QElapsedTimer 用于快速计算两个事件的间隔时间 它没有父类,不支持 Qt 的元对象系统 ,所以 只有接口函数
void start()? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//复位并启动计时器
qint64 elapsed()? ? ? ? ? ? ? ? ? ? //返回流逝的时间,单位:毫秒
qint64 nsecsElapsed() ????????//返回流逝的时间,单位:纳秒
qint64 restart()? ? ? ? ? ? ? ? ? ? ? //重新启动计时器

?四、代码示例

? ? ? ? 详情请查看课本和视频

文章来源:https://blog.csdn.net/2302_79253478/article/details/135682032
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。