QT中定時器使用辦法

2021-06-19 13:16:04 字數 2767 閱讀 5406

在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定時器使用

qtimer類提供了重複和單次觸發訊號的定時器。qtimer類為定時器提供了乙個高階別的程式設計介面。很容易使用 首先,建立乙個qtimer,連線timeout 訊號到適當的槽函式,並呼叫start 然後在恆定的時間間隔會發射timeout 訊號。注意 當qtimer的父物件被銷毀時,它也會被自動銷...

QT定時器使用心得

使用定時器的注意事項 1.qt定時器執行緒相關的使用注意事項 1 不能誇執行緒啟動定時器和停止定時器 1 不能誇執行緒啟動乙個定時器關聯的物件,但在另乙個執行緒釋放 析構 此和定時器關聯的物件 相當於1 的情況不能在其他執行緒停止定時器 qwarning qobject killtimers tim...