Qt:"normal" window 切换到最大化状态然后切换到全屏时大小丢失

Qt: "normal" window size lost when switching to maximized state and then to fullscreen

我有一个 Qt 应用程序,它可以 "normal"(正常的 window,既不最大化也不最小化)、最大化或全屏显示。我通过调用函数 QWidget::showNormal()QWidget::showMaximized()QWidget::showFullscreen().

来实现这一点

首先让我解释一下什么是有效的:

  1. 从正常到最大化然后返回正常。 Qt 记住正常 window 的 window 大小和位置,然后在退出最大化状态时恢复它。
  2. 从正常到全屏,然后返回正常。这里也保持正常 window 的大小和位置。

什么不起作用?

当从正常到最大化,然后到全屏,回到最大化,然后再回到正常时,没有按预期工作。 window 在最大化之前不会调整到原来的大小。相反,window 将与屏幕一样大(基本上与 OS 允许 window 一样大)。

如果我现在再次进入全屏模式,那么在右上角和底部边缘会有奇怪的伪像,看起来像是禁用了视觉效果的旧 Vista window 框架的一部分。

这是一张图片,可以说明我刚才解释的过程:

我尝试使用 QWidget::saveGeometry() 保存 window 的最后一个大小,或者只是在发生 window 状态更改事件时保存 QWidget::size() 获得的大小,但是总有一些情况下它表现得很奇怪。除此之外,再次全屏显示的最后一步对我来说就像一个错误。

你怎么看?

更新:

如果我在最后一步(再次进入全屏)之前手动调整 window 的大小(到任意大小),全屏工作没有问题。

当 window 最大化并进入全屏时,尝试在 showFullScreen() 之前执行 showNormal()

进入全屏时

if (wasMaximized = isMaximized())
{
    setVisible(false);  // prevents window animation on showNormal() call 
    showNormal();
    setVisible(true);
}
showFullScreen();

从全屏返回时

if (isFullScreen())
{
    if (wasMaximized)
        showMaximized();
    else
        showNormal();
}

新的 Qt 5.6 版本显然修复了该错误。