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

Posted

技术标签:

【中文标题】如何检测我的应用程序在 Qt 中失去焦点?【英文标题】:How to detect that my application lost focus in Qt? 【发布时间】:2013-01-03 21:11:15 【问题描述】:

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

为此,我重新实现了leaveEvent()。这似乎在所有情况下都有效,除非通过Alt+Tab 切换到另一个应用程序。我发现我可能需要捕捉另一个事件,但不知何故我找不到合适的。你能推荐一个吗?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢谢。受到您的建议的启发,我发现在我的 eventFilter 中捕获 QEvent::Leave 和 QEvent::WindowDeactivate 事件并在其中任何一个上隐藏我的弹出窗口就足够了。

以上是关于如何检测我的应用程序在 Qt 中失去焦点?的主要内容,如果未能解决你的问题,请参考以下文章

qt对话框失去焦点透明

当 TextEditor 失去焦点时如何得到通知?

QML Mac 全屏模式失去鼠标焦点

当我触摸其他东西时如何让我的 EditText 失去焦点?

如何拦截所有键盘事件并防止在 WinForms 应用程序中失去焦点?

失去焦点时如何破坏无模式对话框?