Как обнаружить, что мое приложение потеряло фокус в Qt?

я отображаю всплывающее окно, когда курсор мыши находится над определенным виджетом, и я хотел бы скрыть это всплывающее окно, когда мышь покидает виджет.

чтобы сделать это, я reimplemented leaveEvent(). Это, похоже, работает во всех случаях, за исключением переключения на другое приложение Alt+Tab. Я понял, что мне, вероятно, нужно поймать другое событие, но почему-то я не могу найти подходящее. Можете предложить?

1 ответов


событие, которое вы ищете, это QEvent::ApplicationDeactivate: "приложение приостановлено и недоступно для пользователя".

вы можете установить фильтр событий на вашем QApplication например, чтобы поймать это событие. См. документацию для QObject::installEventFilter(QObject*) для более подробной информации, как это работает.

начиная с Qt 5.2 QEvent::ApplicationDeactivate событие устарело. Правильный способ определить, когда приложение деактивировано в Qt 5.2 (или более поздней версии), - использовать QGuiApplication::applicationStateChanged(Qt::ApplicationState state) сигнал.