2011-08-07 42 views
4

我正在寫一個簡單的端口通信程序。在應用程序的GUI一側,我有一個帶有12個按鈕的面板,可將信號發送到並行端口接口。與港口的溝通已經完成並正在進行中。我現在需要的是按鈕之間的自動切換。目標是開始一種屏幕保護程序,它會週期性地激活按鈕併發送信號到端口。實際上,它看起來像這樣:一個計時器啓動2分鐘,如果發生任何事件,它將重新啓動。否則,如果計時器到達timeout() qt信號被髮射,開關開始並且按鈕以5秒的間隔自動地被編輯。如何以Qt間隔發射信號?

我的問題是:

  • 如何啓用如果任意鍵/鼠標事件發生時將先復位出發計時器?
  • 如何定義具有睡眠間隔的按鈕之間的轉換?

回答

6

使用QTimer作爲計時部分。

對於「屏幕保護程序」類似的,創建一個單次定時器,將其連接到您的自定義插槽,並將其間隔設置爲兩分鐘。

activeTimer = new QTimer(this); 
activeTimer->setInterval(2*60*1000); 
activeTimer->setSingleShot(true); 
connect(activeTimer, SIGNAL(timeout()), this, SLOT(activateAutoClick())); 
activeTimer->start(); 

在這種定製插槽,開始連接到第二個自定義插槽

void YourThing::activateAutoClick() { 
    autoTimer->setInterval(5*1000); 
    autoTimer->setSingleShot(false); 
    connect(autoTimer, SIGNAL(timeout()), this, SLOT(autoClick())); 
    autoTimer->start(); 
} 

第二,非單次計時器,做任何你在autoClick將信號發送到你的端口方面想。

要取消任一計時器,只需調用它們的stop()方法/插槽即可。

爲貫徹落實「屏幕保護程序」問題,創建一個功能:

  1. 呼叫autoTimer->stop()禁用自動點擊
  2. 呼叫activeTimerr->start(2*60*1000)重新啓動一個

,並調用該函數只要需要。您可以從已有的按鈕插槽或重複事件處理程序(如QWidgetmouseMoveEvent,keyPressedEvent等)中執行此操作。 (請務必閱讀處理程序的文檔,有些需要特殊準備。)