在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還提供了乙個簡單的只有一次定時的函式singleshot()。qtimer *testtimer = new qtimer(this);
//將定時器超時訊號與槽(功能函式)聯絡起來
connect( testtimer, signal(timeout()), this, slot(testfunction()) );
//開始執行定時器,定時時間間隔為1000ms
testtimer->start(1000);
...//停止執行定時器
if ( testtimer->isactive() )
testtimer->stop();
乙個定時器在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 函式中獲取...