我正在用 Qt 制作一个简单的游戏,我想在用户切换到另一个窗口时暂停游戏(这可能是通过最小化它或不小心单击它旁边的窗口等)。我的游戏封装在 QMainWindow 中,因此我希望能够检测到它何时失去焦点。
为此我尝试了几种不同的方法,但都没有成功。我首先尝试重载 QMainWindow 的 focusOutEvent,但是这个方法只在我第一次用 setFocus 给窗口焦点时被调用。我还尝试重载窗口的 event(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) ;
}
关于c++ - QMainWindow 不再是事件窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731753/