2013-01-03 11 views
6

Wyświetlam okno wyskakujące, gdy kursor myszy znajduje się nad określonym widżetem i chciałbym ukryć to okno, gdy mysz opuści widżet.Jak wykryć, że moja aplikacja straciła ostrość w Qt?

Aby to zrobić, ponownie zaimplementowałem leaveEvent(). Wydaje się to działać we wszystkich przypadkach, z wyjątkiem przełączania do innej aplikacji przez Alt+Tab. Odkryłem, że prawdopodobnie potrzebuję złapać kolejne wydarzenie, ale jakoś nie mogę znaleźć właściwego. Czy możesz zaproponować jedną?

Odpowiedz

9

Wydarzenie, którego szukasz, to QEvent::ApplicationDeactivate: "Aplikacja została zawieszona i jest niedostępna dla użytkownika".

Możesz zainstalować filtr zdarzeń na swojej instancji QApplication, aby przechwycić to wydarzenie. Więcej informacji na ten temat można znaleźć w dokumentacji dla QObject::installEventFilter(QObject*).

Od Qt 5.2 wydarzenie QEvent::ApplicationDeactivate jest przestarzałe. Prawidłowym sposobem określenia, kiedy dezaktywacja aplikacji w Qt 5.2 (lub później), jest użycie sygnału QGuiApplication::applicationStateChanged(Qt::ApplicationState state).

+3

Dzięki. Zainspirowany twoją sugestią, stwierdziłem, że wystarczyło złapać zarówno zdarzenia QEvent :: Leave i QEvent :: WindowDeactivate w moim eventFilter i ukryć moje wyskakujące okienko na jednym z nich. – Michal

Powiązane problemy