2013-01-03 77 views
6

當鼠標光標懸停在某個小部件上時,我正在顯示一個彈出窗口,而當鼠標離開小部件時,我想隱藏此彈出窗口。如何檢測我的應用程序在Qt中失去焦點?

要做到這一點,我重新實現了leaveEvent()。這似乎適用於所有情況,除非通過Alt+Tab切換到另一個應用程序。我發現我可能需要趕上另一個事件,但不知何故我找不到合適的事件。你能建議嗎?

回答

9

您正在尋找的事件是QEvent::ApplicationDeactivate:「應用程序已被暫停,並且對用戶不可用」。

您可以在您的QApplication實例上安裝事件過濾器來捕獲此事件。有關更多詳細信息,請參閱QObject::installEventFilter(QObject*)的文檔。

由於Qt 5.2 0123'事件已被棄用。在Qt 5.2(或更高版本)中確定應用程序何時停用的正確方法是使用QGuiApplication::applicationStateChanged(Qt::ApplicationState state)信號。

+3

謝謝。受到你的建議的啓發,我發現在我的eventFilter中捕獲QEvent :: Leave和QEvent :: WindowDeactivate事件就足夠了,並在其中任何一個上隱藏我的彈出窗口。 – Michal

相關問題