Qt中定时器用于间隔一段时间执行一次操作,循环执行,直至定时器停止或被杀死。有两种使用方法,QObject类与QTimer类。个人比较习惯使用QTimer类,信号与槽方式比较简洁灵活。
方法一:QObject中的定时器的使用,需要用到三个函数
1、int QObject::startTimer ( int interval ) ; //开启定时器,执行周期为interval毫秒。
此函数开启成功后,返回这个定时器的ID,并每隔interval毫秒时间进入一次timeEvent函数,直至定时器停止或被杀死。
2、void QObject::timeEvent ( QTimerEvent *event ) ; //需重写timeEvent函数,相关操作在此函数中执行。
当定时器超时后会进入此函数,可以通过event->timerId()来确定当前执行的定时器是哪个。
3、void QObject::killTimer ( int id ); //杀死目的id号的定时器,停止循环。
示例:
#define _MYTIMER_H
#include <QObject>
class MyTimer : public QObject
{
Q_OBJECT
public:
MyTimer(QObject* parent = NULL);
~MyTimer();
void handleTimeout(); //超时处理函数
virtual void timerEvent( QTimerEvent *event);
private:
int m_nTimerID;
};
#endif //_MYTIMER_H
#include "mytimer.h"
#include<QDebug>
#include <QTimerEvent>
#define TIMER_TIMEOUT (5*1000)
MyTimer::MyTimer(QObject *parent) :QObject(parent)
{
m_nTimerID = this->startTimer(TIMER_TIMEOUT);
}
MyTimer::~MyTimer()
{
}
void MyTimer::timerEvent(QTimerEvent *event)
{
if(event->timerId() == m_nTimerID)
{
handleTimeout();
}
}
void MyTimer::handleTimeout()
{
qDebug()<<"Enter timeout processing function\n";
killTimer(m_nTimerID);
}
方法二:使用QTimer类(信号与槽)
1、创建QTimer类对象,
QTimer *m_timer= new QTimer ( this ) ;
2、连接信号与槽,定时器超时后会发出 timeout () 信号,超时时执行槽函数 mySlot()
connect ( timer , SIGNAL ( timeout()) , this ,SLOT( mySlot()) );
3、开启定时器,周期为msec毫秒
timer->start( msec );
#ifndef _MYTIMER_H
#define _MYTIMER_H
#include <QObject>
class MyTimer : public QObject
{
Q_OBJECT
public :
MyTimer ( QObject * parent =NULL) ;
~ MyTimer ( ) ;
public slots:
void mySlot () ; //槽函数,超时处理
private :
QTimer *m_timer;
}
#endif
#include " mytimer.h "
#include < QDebug >
#include < QTimer >
#define TIMER_TIMEOUT (5*1000)
MyTimer :: MyTimer ( QObject *parent ) : QObject (parent)
{
m_timer = new QTimer ( this ) ;
connect ( m_timer , SIGNAL ( timeout() ) , this , SLOT ( mySlot() ) );
m_timer->start ( TIMER_TIMEOUT ) ;
}
MyTimer :: ~MyTimer ()
{
}
void MyTimer :: mySlot()
{
qDebug()<<"do something \n" ;
}