QMainWindow不再活动窗口
我正在用Qt做一个简单的游戏,我想在用户切换到不同的窗口时暂停游戏(这可以通过最小化它或通过不小心点击它旁边的窗口等)。我的游戏被包装在一个QMainWindow中,所以我希望能够检测到什么时候失去焦点。QMainWindow不再活动窗口
我已经尝试了几种不同的方法,但我没有成功。我首先尝试重载QMainWindow的focusOutEvent,但是这种方法只有在我第一次使用setFocus给出窗口焦点时才被调用。我也尝试重载窗口的事件(QEvent *)方法来检查QEvent :: ApplicationActive和QEvent :: ApplicationDeactivate。
我会发布我的QMainWindow的代码,但没有太多要显示,我从字面上试图实现这两种方法,但都没有被调用。我没有别的办法来设置这些方法(也许我错过了一个步骤?)。
有谁知道一个好方法来确定您的QMainWindow是否有“失去焦点”?
我也有类似的需要一次,通过重载我的QMainWindow的event(QEvent*)
方法解决它:
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()
上的任何部件,即使是那些 通常不接受焦点。)
从documentation的这一部分,约focusPolicy
-
这个属性保存小部件接受键盘焦点的方式。
政策是
Qt::TabFocus
如果部件由 黏合,Qt::ClickFocus
如果控件通过点击接受焦点,Qt::StrongFocus
如果同时接受,并Qt::NoFocus
(默认值),如果 它不接受焦点在所有接受键盘焦点。您必须启用键盘焦点的一个小部件,如果它处理键盘 事件。这通常是从小部件的构造函数完成的。对于 例如,
QLineEdit
构造函数调用setFocusPolicy
(Qt::StrongFocus
)。
因此,相应地设置你的焦点政策,我想你会得到适当的焦点事件。
尝试QWidget::isActiveWindow()
。