1. 程式人生 > >【Qt中的定時器】

【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);