【Qt中的定時器】
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);