QT之 QTimer使用方法

2021-08-16 22:14:41 字數 3391 閱讀 9454

qtimer類提供了重複和單次觸發訊號的定時器。

qtimer類為定時器提供了乙個高階別的程式設計介面。很容易使用:首先,建立乙個qtimer,連線timeout()訊號到適當的槽函式,並呼叫start(),然後在恆定的時間間隔會發射timeout()訊號。

注意:當qtimer的父物件被銷毀時,它也會被自動銷毀。

成員函式

訊號示例

更多參考

在qt之模擬時鐘中,1秒(1000毫秒)更新一次:

qtimer *timer = new qtimer(this);

connect(timer, signal(timeout()), this, slot(update()));

timer->start(1000);

start()之後,每秒都會呼叫update()。

可以通過設定setsingleshot(true)來讓定時器只執行一次。也可以使用靜態函式qtimer::singleshot():

qtimer::singleshot(200, this, slot(updatecaption()));
在多執行緒程式中,可以在乙個有事件迴圈的任何執行緒中使用qtimer。使用qthread::exec(),從非gui執行緒啟動乙個事件迴圈。 qt使用定時器的執行緒關聯,以確定哪個執行緒會發出timeout()訊號。正因為如此,你必須在它的執行緒中啟動和停止定時器,不可能從另乙個執行緒啟動定時器。

作為乙個特例,一旦視窗系統事件佇列中的所有事件都已經被處理完,乙個定時為0的qtimer就會到時間了。當需要提供流暢的使用者介面時,可以用這來做比較繁重的工作。

qtimer *timer = new qtimer(this);

connect(timer, signal(timeout()), this, slot(processonething()));

timer->start();

這時,processonething()將會被重複呼叫並且應該很快返回(通常在處理乙個資料項之後),這樣qt可以把事件傳送給視窗部件,並且一旦它完成這個工作就停止這個定時器。這是在圖形使用者介面應用程式中實現繁重的工作的乙個典型方法,現在多執行緒可以在越來越多的平台上使用,我們希望0-毫秒qtimer物件最終被執行緒替代。

定時器的精度取決於底層作業系統和硬體。絕大多數平台支援精度為1毫秒,儘管定時器的準確性在許多現實世界的情況下和這不相符。

準確性也取決於定時器型別(qt::timertype)。對於qt::precisetimer來說,qtimer將試圖保持精確度在1毫秒。精確的定時器也從來不會比預計的還要早超時。

對於qt::coarsetimer和qt::verycoarsetimer型別,qtimer可能早於預期,在間隔之內被喚醒:qt::coarsetimer為間隔的5%,qt::verycoarsetimer為500毫秒。

列舉qt::timertype:常量值

描述qt::precisetimer

0精確的定時器,盡量保持毫秒精度。

qt::coarsetimer

1粗略的定時器,盡量保持精度在所需的時間間隔5%範圍內。

qt::verycoarsetimer

2很粗略的定時器,只保留完整的第二精度。

在unix (包括: linux、os x、ios)中,qt將為qt::precisetimer保持毫秒精度,對於qt::coarsetimer,間隔將調整到5%,使定時器與其他定時器匹配或在差不多在同一時間,目標是讓大多數定時器在同一時間醒來,從而減少cpu喚醒和功耗。

在windows上,qt將為qt::precisetimer使用windows的多**定時器工具(如果可用),為qt::coarsetimer和qt::verycoarsetimer使用正常的windows定時器。

所有平台上,qt::verycoarsetimer的間隔被四捨五入到最接近完整的第二位(例如:23500ms的時間間隔將被捨入到24000ms,20300ms捨入至20000)。

另乙個使用qtimer的方法:為你的物件呼叫qobject::starttimer(),在你的類中(必須繼承qobject)重新實現qobject::timerevent()事件處理器。缺點是timerevent()不支援像單次觸發定時器或訊號那樣的高階特性。

另乙個選擇是qbasictimer。它通常比使用qobject::starttimer() 直接。可以檢視助手中timers描述的三種方法。

一些作業系統限制可能會限制定時器的數量,qt會盡力在限制範圍內工作。

可參考:qbasictimer、qtimerevent、qobject::timerevent()、timers、analog clock example、wiggly example。

下面,我們以qtimer為例,利用開始和停止按鈕來操作乙個進度條的更新。

pstartbutton->settext(qstring::fromlocal8bit("開始"));

pstopbutton->settext(qstring::fromlocal8bit("停止"));

m_pprogressbar->setrange(0, 100);

m_pprogressbar->setvalue(50);

// 設定超時間隔

m_ptimer->setinterval(1000);

// 連線訊號槽

connect(pstartbutton, signal(clicked(bool)), m_ptimer, slot(start()));

connect(pstopbutton, signal(clicked(bool)), m_ptimer, slot(stop()));

connect(m_ptimer, signal(timeout()), this, slot(updateprogress()));

// 槽函式

void mainwindow::updateprogress()

在槽函式updateprogress()中,首先通過m_pprogressbar->value()來獲取當前進度值,然後加1,當進度大於等於100時停止定時器(再繼續執行已經沒任何意義了,因為進度已經達到了100,而且不停止還消耗資源),然後設定進度條的值。

QThread和QTimer的使用方法

說明 1 一下小結不保證對,如果錯誤希望指正 2 queue和direc代表是的connect的鏈結方式,qt directconnection和qt queuedconnection 小結 我想實現的乙個小定時器程式 輸入s start 定時器啟動,列印資訊。輸入e end 定時器停止執行.大概實...

Qt 中Qtimer的使用

1.定時器timer類 建立乙個qtimer物件,將訊號timeout 與相應的槽函式相連,然後呼叫start 函式。接下來,每隔一段時間,定時器便會發出一次timeout 訊號。qtimer timer new qtimer this connect timer,signal timeout th...

Qt定時器 QTimer使用

2014 06 17 15 39 1631人閱讀收藏 舉報 qt基本應用 31 作者同類文章x 1 qtimer類提供了定時器訊號和單觸發定時器。qtimer很容易使用 建立乙個qtimer,使用start 並把timeout 連線到槽函式。當這段時間過去了,它將會發射timeout 訊號。2 使用...