C++ 最小化模式窗口时最小化所有应用程序窗口(在Linux上)

C++ 最小化模式窗口时最小化所有应用程序窗口(在Linux上),c++,linux,qt,qmainwindow,modal-window,C++,Linux,Qt,Qmainwindow,Modal Window,我有一个带有一些窗口的应用程序,其中一个是modal。在Windows操作系统上,当我最小化模式窗口时,所有其他窗口也会最小化。在Linux上(我使用的是Astra Linux),只有模式窗口最小化,所有其他窗口状态不变,并且它们不可用于任何操作,就像它们被禁用一样。我或Astra Linux有什么问题?如何在Astra Linux中执行相同的最小化操作?您可能希望覆盖模态小部件的changeEvent方法以捕获WindowsStateChange事件,检查小部件状态,如果最小化,则强制所有其他

我有一个带有一些窗口的应用程序,其中一个是modal。在Windows操作系统上,当我最小化模式窗口时,所有其他窗口也会最小化。在Linux上(我使用的是Astra Linux),只有模式窗口最小化,所有其他窗口状态不变,并且它们不可用于任何操作,就像它们被禁用一样。我或Astra Linux有什么问题?如何在Astra Linux中执行相同的最小化操作?

您可能希望覆盖模态小部件的
changeEvent
方法以捕获
WindowsStateChange
事件,检查小部件状态,如果最小化,则强制所有其他顶级小部件也最小化(如果没有,则还原所有窗口):

#包括
#包括
无效形式::changeEvent(QEvent*事件)
{
如果(事件->类型()==QEvent::WindowsStateChange)
{
QWidgetList=QApplication::topLevelWidgets();
如果(isMinimized())
{
对于(int i=0;iisMinimized())
{
列表[i]->SetWindowsState(Qt::WindowMinimized);
}
}
}
其他的
{
对于(int i=0;iisMinimized())
{
list[i]->activateWindow();
//或:
//列表[i]->SetWindowsState(Qt::WindowActive);
}
}
}
}
}

Ok。我正在开始测试。@AARez我添加了一些代码,以便在模式恢复时恢复所有窗口。Thx bro!今天我将对此进行测试。方法“activateWindow()”无效。最好是这样写:“setWindowsState(Qt::WindowActive)”
#include <QEvent>
#include <QApplication>

void Form::changeEvent(QEvent * event)
{
    if(event->type() == QEvent::WindowStateChange)
    {
        QWidgetList list = QApplication::topLevelWidgets();
        if(isMinimized())
        {

            for(int i=0; i<list.size(); i++)
            {
                if(!list.at(i)->isMinimized())
                {
                    list[i]->setWindowState(Qt::WindowMinimized);
                }
            }
        }
        else
        {
            for(int i=0; i<list.size(); i++)
            {
                if(list.at(i)->isMinimized())
                {
                    list[i]->activateWindow();

                    //or:
                    //list[i]->setWindowState(Qt::WindowActive);
                }
            }
        }
    }
}