2013-01-03 39 views
6

マウスカーソルが特定のウィジェット上にあるときにポップアップウィンドウを表示しています。マウスがウィジェットを離れるときにこのポップアップを非表示にしたいと思います。私のアプリケーションがQtでフォーカスを失ったことを検出するには?

これを行うには、leaveEvent()を再実装しました。これは、Alt+Tabで別のアプリケーションに切り替える場合を除いて、すべてのケースで機能するようです。私はおそらく別のイベントをキャッチする必要があることを理解しましたが、何とか私は適切なイベントを見つけることができません。あなたは1つを提案できますか?

答えて

9

あなたが探しているイベントはQEvent::ApplicationDeactivateです: "アプリケーションは中断されており、利用できません"。

QApplicationインスタンスにイベントフィルタをインストールして、このイベントをキャッチできます。詳細については、QObject::installEventFilter(QObject*)のドキュメントを参照してください。

Qt 5.2以降、QEvent::ApplicationDeactivateイベントは推奨されていません。アプリケーションがいつQt 5.2(またはそれ以降)で非アクティブ化されるかを識別する正しい方法は、QGuiApplication::applicationStateChanged(Qt::ApplicationState state)信号を使用することです。

+3

ありがとうございます。あなたの提案に触発され、私はeventFilterのQEvent :: LeaveイベントとQEvent :: WindowDeactivateイベントの両方を捕捉し、これらのいずれかでポップアップを非表示にするだけで十分であることがわかりました。 – Michal

関連する問題