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