当模态 window 最小化时(在 Linux 上)最小化所有应用程序 windows
Minimize all application windows when a modal window gets minimized (on Linux)
我有一个包含一些 windows 的应用程序,其中一个是模态的。在 Windows OS 上,当我最小化模态 window 时,所有其他 windows 也最小化。在 Linux 上(我使用的是 Astra Linux)只有模态 window 最小化,所有其他 windows 状态都没有改变,并且它们不可用于任何操作,就像他们被禁用一样。我或 Astra Linux 怎么了?我如何在 Astra Linux 中执行相同的最小化操作?
您可能想要覆盖模态小部件的 changeEvent
方法以捕获 WindowStateChange
事件,检查小部件状态,如果最小化,则强制所有其他顶级小部件也最小化(如果没有,恢复所有windows):
#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);
}
}
}
}
}
我有一个包含一些 windows 的应用程序,其中一个是模态的。在 Windows OS 上,当我最小化模态 window 时,所有其他 windows 也最小化。在 Linux 上(我使用的是 Astra Linux)只有模态 window 最小化,所有其他 windows 状态都没有改变,并且它们不可用于任何操作,就像他们被禁用一样。我或 Astra Linux 怎么了?我如何在 Astra Linux 中执行相同的最小化操作?
您可能想要覆盖模态小部件的 changeEvent
方法以捕获 WindowStateChange
事件,检查小部件状态,如果最小化,则强制所有其他顶级小部件也最小化(如果没有,恢复所有windows):
#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);
}
}
}
}
}