如何检测我的应用程序在Qt中失去焦点?

时间:2013-01-03 21:11:16

标签: c++ qt qt4 qt5 qevent

当鼠标光标悬停在某个小部件上时,我正在显示一个弹出窗口,我想在鼠标离开小部件时隐藏此弹出窗口。

要做到这一点,我重新实现了leaveEvent()。这似乎适用于所有情况,除非Alt+Tab切换到另一个应用程序。我发现我可能需要抓住另一个事件,但不知怎的,我找不到合适的事件。你能建议吗?

1 个答案:

答案 0 :(得分:10)

您要查找的事件是QEvent::ApplicationDeactivate:“应用程序已被暂停,用户无法使用”。

您可以在QApplication实例上安装事件过滤器来捕获此事件。有关其工作原理的详细信息,请参阅QObject::installEventFilter(QObject*)的文档。

自Qt 5.2起,QEvent::ApplicationDeactivate事件已弃用。在Qt 5.2(或更高版本)中识别应用程序何时停用的正确方法是使用QGuiApplication::applicationStateChanged(Qt::ApplicationState state)信号。