2011-03-01 76 views
8

我試圖在02:30的特定時間啓動計時器。每天從02:30開始。QTimer啓動特定時間

可能嗎?你有什麼主意嗎?

非常感謝。

回答

9

QTimer本身並不處理特定的時間,但您可以將它與QDateTime結合使用以獲取所需內容。也就是說,使用QDateTime對象來計算(現在)和2:30(QDateTime :: msecsTo()在這裏看起來特別合適的秒數),然後設置你的QTimer在幾秒鐘後關閉。必要時重複。

+0

當定時器運行時設備進入暫停狀態時,此操作將失敗。它會跑得太久。 – ypnos 2017-01-18 12:02:45

6

根據所需的分辨率,你可以使用一個普通的QTimer,讓我們說每分鐘。
在timerEvent中,你可以檢查你是否在正確的時間(使用QDateTime),並觸發必要的事件。

+1

這種方法不如@Jeremy's那麼優雅,但它提供了額外的好處,不會中斷用戶是否決定重置系統時鐘。 – Septagram 2011-03-01 11:48:11

1

傑里米的解決方案確實很優雅,但它沒有考慮夏令時。 爲了防範這種情況,您應該每隔一小時啓動一次計時器事件並檢查掛鐘。 計算目標的增量,就像Jeremy提出的那樣,如果它落在下一個小時內,設置一個計時器來觸發,並禁用小時計時器。
如果沒有,請等待小時計時器再次啓動。

Pseudo code: 

Get wall clock time 
Calculate difference between target time and wall clock 
If difference < 1 hour: 
    Set timer to fire after difference secs 
    If this is a repeating event, restart the hourly timer 
Else: 
    Start watch timer to do this calculation again after one hour