QMainWindow不再是活动窗口

Joe*_*e M 4 c++ qt qt4

我正在用Qt制作一个简单的游戏,我想在用户切换到另一个窗口时暂停游戏(这可能是通过最小化它或不小心点击它旁边的窗口等).我的游戏包含在QMainWindow中,因此我希望能够检测到失去焦点的时间.

我为此尝试了几种不同的方法,但我没有成功.我首先尝试重载QMainWindow的focusOutEvent,但是这个方法只在我第一次用setFocus给窗口焦点时调用.我还尝试重载窗口的事件(QEvent*)方法来检查QEvent :: ApplicationActive和QEvent :: ApplicationDeactivate.

我会发布我的QMainWindow的代码,但没有太多要显示,我实际上只是试图实现这两个方法,但都没有被调用.我没有做任何其他设置这些方法(也许我错过了一步?).

有谁知道确定你的QMainWindow是否"失去焦点"的好方法?

azf*_*azf 6

我有一次类似的需求,并通过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)