2011-08-11 131 views
1

我正在編寫一個qt程序,並具有以下要求。QT事件問題

當30秒過去沒有任何點擊,鎖定屏幕。如果有人在這30秒後再次點擊,請將他重定向到登錄屏幕。

我已閱讀關於事件的qt文檔,我相信我需要方法1或2來處理鼠標事件。

1.在qApp上安裝事件過濾器 qApp上的事件過濾器監視發送到應用程序中所有對象的所有事件。

2.重新實現QApplication :: notify()。 Qt的事件循環和sendEvent()調用這個函數來分派事件。通過重新實現它,你可以在任何其他人面前看到事件。

他們對我來說似乎也很強大,但我不明白他們的區別。 哪一個適合我的要求?謝謝。

回答

2

除了事實上QApplication :: notify(或其覆蓋)將被稱爲之前之前的任何事件過濾器可能在您的應用程序上,您基本上可以實現與任一解決方案相同的事情。

由於第一種方法不需要繼承QApplication,所以它通常是首選的方法。在您的情況下覆蓋QApplication :: notify的唯一原因是由於其他原因(例如,因爲你需要做與你自己的自定義事件相關的任何事情。

但我會親自去爲以下解決方案看你的需求:

  1. 上qApp安裝一個事件過濾器
  2. 以30秒的間隔
  3. 創建一個定時器,定時器連接到鎖屏幕方法
  4. 每次檢測到鼠標按鍵時,您的事件過濾器都會重置計時器。

取決於您的應用程序,您可能還需要查找KeyPress事件以及可能的MouseMove事件。