Qt中定时器的两种使用方法(QObject类与QTimer类)

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" ;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容