2009-05-29 70 views
1

我想確定何時我的應用程序的主窗口已被移動。主窗口是一個標準的QMainWindow,我們已經在QApplication上安裝了一個eventFilter來查找QMainWindow的moveEvents,但是沒有一個被觸發。由於各種原因,子類化QMainWindow並不是真正的選擇。有沒有辦法確定頂層Qt窗口是否已被移動?

對此的任何想法,除了開始QTimer tto不斷檢查位置,將不勝感激。

回答

1

我想最好是在頂層窗口安裝事件過濾器,而不是應用程序。但是,如果您仍然無法獲得QMoveEvent,並且您在使用Windows,則可能會覆蓋winEventFilter()並等待WM_MOVE。 Linux和Mac可能具有類似的功能。

我通常不建議打破平臺獨立性,但有時它可能是有道理的。

1

子類確實是最好的解決辦法: -/

在實現你的頂層窗口的類,你只是重載這個函數:

virtual void moveEvent (QMoveEvent * event) 

從文檔:

這事件處理程序可以在子類中重新實現 以接收 小部件移動事件,該事件在 中傳遞儀表。當小部件 收到此事件時,它已經在 的新位置。

舊位置可通過 QMoveEvent :: oldPos()訪問。

這應該允許您檢測您的主窗口是否已移動。 爲什麼你不能繼承?您是否直接使用QMainWindow的實例?無論如何,通常的用例就是繼承它的子類。

+0

感興趣的主窗口類別是單獨維護的一組代碼的一部分,因此無法細分爲解決此問題的子類別。 – 2009-05-31 05:19:58

相關問題