qt中的定时器除了实用QTimer之外,凡是继承了QObject的对象都可以使用定时器事件。
1、开启定时器:
int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer)
返回值是定时器ID。
参数1是时间间隔,可以有几种写法:
- 最常用的是直接写数字,单位是毫秒
- 标准库时间:
using namespace std::chrono;
startTimer(milliseconds(50));//毫秒
startTimer(seconds(1));//秒
startTimer(minutes(1));//分钟
- 标准库时间字面值常量 c++自定义类型的字面值常量
using namespace std::chrono_literals;
startTimer(100ms);
startTimer(5s);
startTimer(2min);
startTimer(1h);
参数2是定时器精度:
- Qt::PreciseTimer 精密计时器试图保持毫秒的精确度
- Qt::CoarseTimer 粗计时器试图将精度保持在所需间隔的5%以内
- Qt::VeryCoarseTimer 非常粗糙的计时器只能保持完全的秒精度
在UNIX(包括Linux、macOS和iOS)上,Qt将保持Qt::PreciseTimer的毫秒精度。对于Qt::CoarseTimer,间隔将调整到5%,以使定时器与预期在同一时间或大约在同一时间触发的其他计时器对齐。其目的是使大多数定时器同时唤醒,从而减少CPU唤醒和功耗。
在Windows上,Qt将使用Windows的多媒体定时器工具(如果可用)来实现Qt::PreciseTimer,并使用普通Windows定时器来实现Qt::groassetimer和Qt::VeryCoarseTimer。
在所有平台上,Qt::VeryCoarseTimer的间隔四舍五入到最接近的整秒(例如,23500ms的间隔将四舍五入到24000ms,20300ms将四舍五入到20000ms)。
2、定时器事件
void timerEvent(QTimerEvent *event)
{
int id = event->timerId();
if(id == xx)
{
//do something
}
}
3、停止定时器