2013-01-03 5 views
6

Ich zeige ein Popupfenster an, wenn sich der Mauszeiger über einem bestimmten Widget befindet, und ich möchte dieses Popup ausblenden, wenn die Maus das Widget verlässt.Wie erkennt man, dass meine Anwendung den Fokus in Qt verloren hat?

Um es zu tun, habe ich leaveEvent() Reimplementiert. Dies scheint in allen Fällen zu funktionieren, außer beim Wechsel zu einer anderen Anwendung durch Alt+Tab. Ich habe herausgefunden, dass ich wahrscheinlich ein anderes Ereignis einfangen muss, aber irgendwie kann ich nicht das richtige finden. Kannst du mir einen vorschlagen?

Antwort

9

Das Ereignis, das Sie suchen, ist QEvent::ApplicationDeactivate: "Die Anwendung wurde ausgesetzt und ist für den Benutzer nicht verfügbar".

Sie können einen Ereignisfilter auf Ihrer QApplication Instanz installieren, um dieses Ereignis zu erfassen. Weitere Informationen dazu finden Sie in der Dokumentation für QObject::installEventFilter(QObject*).

Seit Qt 5.2 ist das Ereignis QEvent::ApplicationDeactivate veraltet. Der richtige Weg, um festzustellen, wann eine Anwendung in Qt 5.2 (oder höher) deaktiviert wird, ist die Verwendung des Signals QGuiApplication::applicationStateChanged(Qt::ApplicationState state).

+3

Danke. Inspiriert von Ihrem Vorschlag fand ich heraus, dass es ausreichend war, um sowohl QEvent :: Leave als auch QEvent :: WindowDeactivate Ereignisse in meinem eventFilter abzufangen und mein Popup auf diesen beiden zu verstecken. – Michal

Verwandte Themen