我正在用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) ;
}
Run Code Online (Sandbox Code Playgroud)