【发布时间】:2018-04-24 13:09:02
【问题描述】:
我想最小化无边界模态对话框,使其留在任务栏中。问题是,对话框最小化到屏幕底部:
截图:
代码:
setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
setWindowModality(Qt::ApplicationModal);
this->setWindowState(Qt::WindowMinimized);
另外,这个对话框不是主窗口,所以我认为它应该在单击对话框中的最小化时将它们最小化,并且问题出现在另一个非无边框模式对话框中。
带有边框的最小化模式对话框的屏幕截图:
我在 Windows 10 上使用 Qt 5.9.2。如何解决此问题?提前致谢。
【问题讨论】:
-
如果您的对话框有一个当前不可见的父窗口,则会发生这种情况。尝试创建没有父级的对话框,即
setParent(nullptr)。 (这也意味着你需要自己删除) -
@Felix 是的,我知道,这个问题只有在设置了父级时才会发生。删除父级时效果很好。我认为这是 Qt 中的错误?
-
这是故意的,因为您的对话框没有自己的任务栏条目。因此,它以这种方式最小化。这是 Windows 上的每个设计,而不是 Qt 的错。例如,在 Linux 上,它确实会同时最小化两个窗口。所以对于 Windows,这是自然的行为
-
@Felix 好的。那么它不应该同时最小化
Windows OS上的两个窗口,例如Linux,或者这个窗口行为是硬编码在Windows中的吗?谢谢。 -
是的,它被硬编码到 Windows 中。 Qt 只是告诉操作系统“最小化窗口”,然后操作系统决定如何去做,这就是结果。如果你想要不同的东西,你必须自己编码。 (对最小化事件做出反应,隐藏对话框并最小化父窗口,反之亦然)。
标签: c++ qt windows-applications