QMainWindow 不再处于活动状态窗口
QMainWindow no longer active window
我正在用Qt制作一个简单的游戏,我想在用户切换到不同的窗口时暂停游戏(这可能是通过最小化它或意外点击旁边的窗口等(。 我的游戏被包装在QMainWindow中,所以我希望能够检测到它何时失去焦点。
为此,我尝试了几种不同的方法,但没有成功。 我首先尝试重载QMainWindow的focusOutEvent,但只有当我第一次使用setFocus为窗口提供焦点时才调用此方法。 我还尝试重载窗口的事件(QEvent *(方法来检查QEvent::ApplicationActive和QEvent::ApplicationDeactivate。
我会为我的 QMainWindow 发布代码,但没有太多要显示的内容,我实际上只是尝试实现这两个方法,但都没有被调用。 我没有做任何其他事情来设置这些方法(也许我错过了一个步骤?
有谁知道确定您的QMainWindow是否"失去焦点"的好方法?
我曾经有过类似的需求,并通过重载event(QEvent*)
QMainWindow的方法来解决它:
bool MyMainWindow::event(QEvent * e)
{
switch(e->type())
{
// ...
case QEvent::WindowActivate :
// gained focus
break ;
case QEvent::WindowDeactivate :
// lost focus
break ;
// ...
} ;
return QMainWindow::event(e) ;
}
从文档中 -
小部件通常必须
setFocusPolicy()
到其他内容 Qt::NoFocus,以便接收焦点事件。(请注意, 应用程序员可以在任何小部件上调用setFocus()
,即使是那些 通常不接受焦点。
从文档的这一部分来看,大约focusPolicy
-
此属性保存小组件接受键盘焦点的方式。
如果小组件通过以下方式接受键盘焦点,则
Qt::TabFocus
策略 Tab 键,Qt::ClickFocus
小部件是否通过单击接受焦点, 如果同时接受两者,则Qt::StrongFocus
,如果接受,则Qt::NoFocus
(默认值( 它根本不接受焦点。如果小组件处理键盘,则必须为其启用键盘焦点 事件。这通常是从小部件的构造函数中完成的。为 实例,
QLineEdit
构造函数调用setFocusPolicy
(Qt::StrongFocus
(.
因此,相应地设置您的焦点策略,我想您将收到适当的焦点事件。
> 尝试QWidget::isActiveWindow()
.
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 在使用 gSoap 链接多个 SOAP 服务时启用保持活动状态
- 生成线程并在运行时执行其他操作,只要它处于活动状态
- 如何确定boost msm中的特定状态是否为活动状态
- GCC (libstdc++) 运行时如何在异常处于活动状态时决定终止 ()
- “B1的多重定义”,即使警卫处于活动状态
- 全局挂钩 DLL 仅在 C# 主窗口处于活动状态/前台时调用 C# 回调方法
- 保持 boost.process 在函数之外处于活动状态,该函数被调用
- 当 /Whorearchive选项处于活动状态时,无法使用Visual Studio链接到Windows上的自构建张量
- IBM Rhapsody c++ 代码生成 - 为什么总是在状态图周围放置一个活动状态
- 暂停游戏OnSteamVR叠加层处于活动状态
- 我怎么知道哪种上下文处于活动状态
- 如何使用QEvent::WindowBlocked,以便特定窗口始终处于活动状态?
- SDL2窗口是否可以始终处于活动状态,并在DirectX窗口上运行
- 模式对话框处于活动状态时隐藏MFC主窗口
- QMainWindow 不再处于活动状态窗口
- 检查窗口是否处于活动状态
- 单独线程中的两个窗口同时处于活动状态
- MFC -消息框显示,主窗口有一个取消按钮.消息框处于活动状态时防止取消
- 当窗口设置为活动状态时获取通知