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

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

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

6

Решение

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

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

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

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]