生活随笔
收集整理的這篇文章主要介紹了
Qt中定时器使用的两种方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Qt中定時器的使用有兩種方法,一種是使用QObject類提供的定時器,還有一種就是使用QTimer類。
? ? ? ? ?其精確度一般依賴于操作系統和硬件,但一般支持20ms。下面將分別介紹兩種方法來使用定時器。
方法一:QObject中的定時器的使用,需要用到三個函數
1、 ? int QObject::startTimer ( int interval ) ;
? ? ? ? 這個是開啟一個定時器的函數,他的參數interval是毫秒級別。當開啟成功后會返回這個定時器的ID, 并且每隔interval 時間后會進入timerEvent 函數。直到定時器被殺死。
2、 void QObject::timerEvent ( QTimerEvent * event );?
當定時器超時后,會進入該事件timerEvent函數,需要重寫timerEvent函數,在函數中通過判斷event->timerId()來確定定時器,然后執行某個定時器的超時函數。
3、 void QObject::killTimer ( int id );
? ? ? ? ? ? ??通過從startTimer返回的ID傳入killTimer 函數中殺死定時器,結束定時器進入超時處理。
以下是QObject中的定時器具體使用簡單例子:
[cpp]?view plain
?copy #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??
[cpp]?view plain
?copy #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 *timer = new QTimer(this);
2、 ?timer 超時后會發出timeout()信號,所以在創建好定時器對象后給其建立信號與槽
connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
3、 ?在需要開啟定時器的地方調用void QTimer::start ( int msec );
這個start函數參數也是毫秒級別;
timer->start(msec?);
4、 在自己的超時槽函數里面做超時處理。
以下是QTimer定時器類具體使用簡單例子:
[cpp]?view plain
?copy #ifndef?_MYTIMER_H?? #define?_MYTIMER_H?? ?? #include?<QObject>?? class?QTimer;?? class?MyTimer?:?public?QObject?? {?? ????Q_OBJECT?? ?? public:?? ????MyTimer(QObject*?parent?=?NULL);?? ????~MyTimer();?? public?slots:?? ????void?handleTimeout();???? private:?? ????QTimer?*m_pTimer;?? };?? ?? #endif?//_MYTIMER_H??
[cpp]?view plain
?copy #include?"mytimer.h"?? ?? #include<QDebug>??? #include?<QTimer>?? ?? #define?TIMER_TIMEOUT???(5*1000)?? ?? MyTimer::MyTimer(QObject?*parent)?? ????:QObject(parent)?? {?? ????m_pTimer?=?new?QTimer(this);?? ????connect(m_pTimer,?SIGNAL(timeout()),?this,?SLOT(handleTimeout()));?? ????m_pTimer->start(TIMER_TIMEOUT);?? }?? ?? MyTimer::~MyTimer()?? {?? ?????? }?? ?? void?MyTimer::handleTimeout()?? {?? ????qDebug()<<"Enter?timeout?processing?function\n";?? ????if(m_pTimer->isActive()){?? ????????m_pTimer->stop();?? ????}?? } ?
總結
以上是生活随笔為你收集整理的Qt中定时器使用的两种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。