Qt中定时器问题还是比较简单的,分为2种:
(1)QObject类中的定时器
(2)QTimer类中的
一、QObject类的定时器
QObject是所有Qt对象的基类,这里面有一个基本的定时器。
什么是定时器呢?
就是这个定时器一旦被设置,每隔一段时间就会触发(timerEvent()),直到明确的使用QObject::killTimer()结束。
这里顺便说一下,触发的这个QTimerEvent事件,处理器会按照事件队列的顺序来处理。
了解一下接口:
- int QObject::startTimer(int interval);
功能:开始一个定时器并返回定时器ID;
若不能创建,则返回0;
参数:间隔时间
- virtual void QObject::timerEvent(QTimerEvent *event)
功能: 超时事件处理函数,多用于重载;
参数:超时事件
-void QObject::killTimer ( int id )
功能:关闭定时器
参数:定时器的ID
//一些用法举例
m_nTimerId = startTimer(1000);
if ( m_nTimerId != 0 )
killTimer(m_nTimerId);
二、定时器类QTimer
这个定时器和上面的QObject的定时器功能是一样的,不同的地方在:他默认只提供一次触发超时事件。
用法举例
//创建定时器
QTimer *testTimer = new QTimer(this);
//将定时器超时信号与槽(功能函数)联系起来
connect( testTimer, SIGNAL(timeout()), this, SLOT(testFunction()) );
//开始运行定时器,定时时间间隔为1000ms
testTimer->start(1000);
//停止运行定时器
if ( testTimer->isActive() )
testTimer->stop();
用法举例
定时器的使用非常简单,我们只需要以下几个步骤就可以完成定时器的应用:
1.产生一个定时器
QTimer *time_clock=new QTimer(parent);
2.连接这个定时器的信号和槽,利用定时器的timeout()
connect(time_clock,SIGNAL(timeout()),this,SLOT(slottimedone()));
即定时时间到就会发送timeout()信号,从而触发slottimedone()槽去完成某项事情
3.开始定时器,并设定定时周期
定时器定时有两种:start(int time)和setSingleShot(true)
其中start(int time)是表示每隔time秒就会重启定时器,可以重复触发定时,除非你利用stop()将定时器关掉。
而setSingleShot(true)则是仅仅启动定时器一次
我们工程中常用的是前者。
time_clock->start(2000);