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

Minimize all application windows when a modal window gets minimized (on Linux)

本文关键字:窗口 最小化 Linux 应用程序 模式      更新时间:2023-10-16

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

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

#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);
                }
            }
        }
    }
}