Qt的三種定時器的使用


1、singleShot

原型:void QTimer::singleShot(int msec, const QObject *receiver, const char *member)

解釋:這個靜態函數在一個給定時間間隔 msec(毫秒) 之后調用一個槽。

用法1 :
假設類A有個槽函數 function() { }
我們要在1s之后執行它

QTimer::singleShot(1000,this, &A::function());

用法2:
實現循環
槽函數中還是singleShot 即:

//這樣的話就是一個每1秒執行一次的定時器
bool
condition = true; function(){ if(condition){ //條件控制 QTimer::singleShot(1000,this, &A::function()); } }

 

2、timerEvent

函數原型:[virtual protected] void QObject::timerEvent(QTimerEvent *event)

解釋:QObject提供的定時器通過startTimer(int interval)啟動,該函數啟動了一個時間間隔為interval毫秒的定時器,啟動成功只返回一個定時器標志符,失敗返回0,因為只返回一個標志符,所以無法獲得該定時器的對象,它是QObject的成員函數,及不能正常的使用信號與槽,只能通過重載定時器事件處理函數timerEvent,在里面寫定時器觸發要做的事。

如果有多個定時器,可以通過QTimerEvent::timerId()來獲取已經啟動的定時器標識符。

該定時器只能通過killTimer(int id)殺死,參數id為之前生成定時器標志符,根據標志符殺死定時器。

void QObject::killTimer(int id); 

每一個定時器做的事情可能不一樣,但是定時器處理函數只有一個,我們可以通過if判斷來讓某個定時器干某件事

class MyObject : public QObject { Q_OBJECT public: MyObject(QObject *parent = 0); protected: //重寫定時器事件
      void timerEvent(QTimerEvent *event); private//聲明定時器ID
      int timeID; }; MyObject::MyObject(QObject *parent) : QObject(parent) { timeID = startTimer(1000);   // 1-second timer
 } void MyObject::timerEvent(QTimerEvent *event) { qDebug() << "Timer ID:" << event->timerId(); if(event->timerId() == timeID) { //todo function
          if(timeID) { killTimer(timeID);// 殺死定時器
 } timeID = 0; } }

 

3、QTimer類定時器

使用QTimer類定時器的步驟:

(1)先創建一個QTimer定時器實例:QTimer *timer = new QTimer(this);

(2)然后連接超時信號與槽:connect(timer, SIGNAL(timeout()), this, SLOT(Func()));

(3)設置定時器觸發間隔(設置觸發間隔有兩個方法,一個是調用setInterval(int msec)設置,另一個是調用start(int msec)時可將間隔時間作為參數):

void setInterval(int msec) ;,

(4)在需要的地方啟動定時器:start(),或者設間隔時間,可通過start(1000),即啟動一個1000毫秒的定時器

(5)用完了暫停定時器:stop();

(6)刪除定時器實例:delete timer;

 

參考鏈接:https://blog.csdn.net/ddllrrbb/article/details/88810767

     https://blog.csdn.net/kidults/article/details/80091788

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM