QT中定時器的使用

2021-06-13 00:32:56 字數 2714 閱讀 2826

在qt中使用定時器有兩種方法,一種是使用qobiect類的定時器;一種是使用qtimer類。

定時器的精確性依賴於作業系統和硬體,大多數平台支援20ms的精確度。

■、qobject類的定時器

qobject是所有qt物件的基類,它提供了乙個基本的定時器。通過qobject::starttimer(),可以把乙個一毫秒為單位的時間間隔作為引數來開始定時器,這個函式返回乙個唯一的整數定時器的識別符號。這個定時器開始就會在每乙個時間間隔"觸發",直到明確的使用這個定時器的識別符號來呼叫qobject::killtimer()結束。

當定時器觸發時,應用程式會傳送乙個qtimerevent。在事件迴圈中,處理器按照事件佇列的順序來處理定時器事件。當處理器正忙於其它事件處理時,定時器就不能立即處理。

qobject類還提供定時期的功能。與定時器相關的成員函式有:starttimer()、timeevent()、killtimer()。

qobject基類中的starttimer()和timerevent()原型及說明如下:

int qobject::starttimer(int  interval);

開始乙個定時器並返回定時器id,如果不能開始乙個定時器,將返回0。定時器開始後,每隔interval毫秒間隔將觸發一次超時事件,直到killtimer()被呼叫來刪除定時器。如果interval為0,那麼定時器事件每次發生時沒有視窗系統事件處理。

virtual void qobject::timerevent(qtimerevent  *event);

虛函式timerevent()被過載來實現使用者的超時事件處理函式。如果有多個定時器在執行,qtimerevent::timerid()被用來查詢指定定時器,對其進行操作。

當定時器事件發生時,虛函式timerevent()隨著qtimerevent事件引數類一起被呼叫,過載這個函式可以獲得定時器事件。

定時器的用法如下:

//標頭檔案

class qnewobject : public  qobject;

//原始檔

qnewobject::qnewobject( qobject *  parent )

:qnewobject( parent )

qnewobject::~qnewobject()

void qnewobject::timerevent( qtimerevent *event  )

■、定時器類qtimer

定時器類qtimer提供當定時器觸發的時候發射乙個訊號的定時器,他提供只觸發一次的超時事件,通常的使用方法如下:

//建立定時器

qtimer *testtimer = new  qtimer(this);

//將定時器超時訊號與槽(功能函式)聯絡起來

connect( testtimer,  signal(timeout()), this, slot(testfunction())  );

//開始執行定時器,定時時間間隔為1000ms

testtimer->start(1000);

...//停止執行定時器

if  ( testtimer->isactive() )

testtimer->stop();

qtimer還提供了乙個簡單的只有一次定時的函式singleshot()。

乙個定時器在100ms後觸發處理函式animatetimeout()並且只觸發一次。**如下:

qtimer::singleshot( 100, this,  slot(animatetimeout()) );

第二種介紹:

定時器的使用非常簡單,我們只需要以下幾個步驟就可以完成定時器的應用:

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

備註:我在中文的官網上找到的關於定時器的用法是如下的使用格式:

qtimer  *timer = new qtimer( myobject );

connect( timer, signal(timeout()), myobject,  slot(timerdone()) );

timer->start( 2000, true ); //  2秒單觸發定時器

關於最後一句,timer->start( 2000, true  );在我實際應用中,加上true編譯器就會報錯,不知道為什麼,去掉就沒有關係了。這個問題遺留下來,或許以後可以解決掉

qt中定時器的使用

在qt中使用定時器有兩種方法,一種是使用qobiect類的定時器 一種是使用qtimer類。定時器的精確性依賴於作業系統和硬體,大多數平台支援20ms的精確度。qobject類的定時器 qobject是所有qt物件的基類,它提供了乙個基本的定時器。通過qobject starttimer 可以把乙個...

QT中定時器的使用

使用tim erev en ttimerevent timere vent override virtual protected void qtimer timerevent qtimerevent e 所以只需要在wid get.hwidget.h widget h裡宣告一下,然後去wid get...

Qt中定時器Timer使用

軟體平台 qt5.3 電腦作業系統 win7 64位 1.qtimeevent類用來描述乙個定時器事件的。通過函式starttimer來開啟乙個定時器,這個函式需要乙個以毫秒為單位的證書作為引數來表明設定的時間,函式返回乙個整型編號來代表這個定時器。當定時器溢位時就在timerevent 函式中獲取...