6
當鼠標光標懸停在某個小部件上時,我正在顯示一個彈出窗口,而當鼠標離開小部件時,我想隱藏此彈出窗口。如何檢測我的應用程序在Qt中失去焦點?
要做到這一點,我重新實現了leaveEvent()
。這似乎適用於所有情況,除非通過Alt+Tab
切換到另一個應用程序。我發現我可能需要趕上另一個事件,但不知何故我找不到合適的事件。你能建議嗎?
當鼠標光標懸停在某個小部件上時,我正在顯示一個彈出窗口,而當鼠標離開小部件時,我想隱藏此彈出窗口。如何檢測我的應用程序在Qt中失去焦點?
要做到這一點,我重新實現了leaveEvent()
。這似乎適用於所有情況,除非通過Alt+Tab
切換到另一個應用程序。我發現我可能需要趕上另一個事件,但不知何故我找不到合適的事件。你能建議嗎?
您正在尋找的事件是QEvent::ApplicationDeactivate
:「應用程序已被暫停,並且對用戶不可用」。
您可以在您的QApplication
實例上安裝事件過濾器來捕獲此事件。有關更多詳細信息,請參閱QObject::installEventFilter(QObject*)
的文檔。
由於Qt 5.2 0123'事件已被棄用。在Qt 5.2(或更高版本)中確定應用程序何時停用的正確方法是使用QGuiApplication::applicationStateChanged(Qt::ApplicationState state)
信號。
謝謝。受到你的建議的啓發,我發現在我的eventFilter中捕獲QEvent :: Leave和QEvent :: WindowDeactivate事件就足夠了,並在其中任何一個上隱藏我的彈出窗口。 – Michal