一、介绍

Qt定时器目前有两种:

1.QObiect类的定时器。

2.QTimer类定时器。

定时器的精确度依赖于操作系统和硬件,大多数平台支持20ms的精确度。

二、QObject定时器

1.相关函数:

int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);

函数描述:

启动计时器并返回计时器标识符,如果无法启动计时器,则返回零。

计时器事件将每间隔毫秒发生一次,直到调用killTimer()。如果interval为0,那么每次没有更多的窗口系统事件要处理时,定时器事件就会发生一次。

发生定时器事件时,使用 QTimerEvent 事件参数类调用虚拟 timerEvent() 函数。 重新实现此函数以获取计时器事件。

如果多个定时器正在运行,QTimerEvent::timerId() 可以用来找出哪个定时器被激活。

参数:

int interval:时间间隔,单位毫秒。

Qt::TimerType timerType:计时器的精确度类型,默认为CoarseTimer。.

PreciseTimer:精确计时器试图保持毫秒精度

CoarseTimer:粗略计时器尝试将精度保持在所需间隔的 5% 内

VeryCoarseTimer:非常粗略的计时器

void killTimer(int id);

函数描述:使用计时器标识符(id)终止计时器。

virtual void timerEvent(QTimerEvent *event);

函数描述:此事件处理程序可以在子类中重新实现,以接收对象的计时器事件。

QTimerEvent *event: event.timerId() 获取

三、QTimer类定时器

定时器类QTimer提供当定时器触发的时候发射一个信号的定时器,它提供只触发一次的超时事件.

(一)常规用法

1.创建定时器

QTimer *testTimer = newQTimer ( this );

2.将定时器超时信号与槽(功能函数)联系起来

connect ( testTimer, SIGNAL (timeout()), this, SLOT (timeoutFun()));

3.开始运行定时器,定时时间间隔为1000ms

testTimer->start ( 1000 );

4.停止运行定时器

if( testTimer->isActive() )

{

testTimer->stop();

}

5.singleShot:bool属性:

单次计时器只触发一次,非单次计时器每间隔毫秒触发一次,此属性的默认值为 false(即非单次计时器)。

testTimer->setSingleShot(true);//可以改变此属性,设置为true时只出发一次timeout事件。

testTimer->isSingleShot();

6.Qt::TimerType属性:计时器的准确性

Qt::TimerType timerType();

void setTimerType(Qt::TimerType atype);

一般地,默认属性为Qt::PreciseTimer

Qt::PreciseTimer 0 Precise timers try to keep millisecond accuracy(精确计时器试图保持毫秒精度)

Qt::CoarseTimer 1 Coarse timers try to keep accuracy within 5% of the desired interval(粗略计时器尝试将精度保持在所需间隔的 5% 内)

Qt::VeryCoarseTimer 2 Very coarse timers only keep full second accuracy(非常粗略的计时器只能保持整秒精度)

7.计时器剩余时间:

int remainingTime();

此属性以毫秒为单位保存剩余时间返回定时器的剩余值,以毫秒为单位,直到超时。 如果计时器处于非活动状态,则返回值为 -1。如果定时器超时,返回值为0。

8.计时器时间间隔:

void setInterval(int msec);

int interval() const { return inter; }

9.计时器ID:

int timerId()

(二)一次定时的函数singleShot

QTimer::singleShot(100, this, SLOT( animateTimeout()));

QTimer::singleShot(50, this, [=] {m_thread->start();});

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。