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

时间:2018-03-15 09:28:58

标签: c++ linux qt qmainwindow modal-window

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

1 个答案:

答案 0 :(得分:0)

您可能希望覆盖模态窗口小部件的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);
                }
            }
        }
    }
}