I'm displaying a popup window when the mouse cursor is over a certain widget and I'd like to hide this popup when the mouse leaves the widget.
To do it, I reimplemented leaveEvent()
. This seems to work in all cases except when switching to another application by Alt+Tab
. I figured out that I probably need to catch another event, but somehow I can't find the proper one. Can you suggest one?
The event you are looking for is QEvent::ApplicationDeactivate
: "The application has been suspended, and is unavailable to the user".
You can install an event filter on your QApplication
instance to catch this event. See the documentation for QObject::installEventFilter(QObject*)
for more details how this works.
Since Qt 5.2 the QEvent::ApplicationDeactivate
event is deprecated. The correct way to identify when an application is deactivated in Qt 5.2 (or later) is to use the QGuiApplication::applicationStateChanged(Qt::ApplicationState state)
signal.
来源:https://stackoverflow.com/questions/14147304/how-to-detect-that-my-application-lost-focus-in-qt