Qt:切换到最大化状态然后切换到全屏时,“正常”窗口大小丢失

时间:2015-10-25 17:17:42

标签: qt window size fullscreen

我有一个Qt应用程序可以显示为“正常”(既不是最大化也不是最小化的正常窗口),最大化或全屏。我通过调用函数QWidget::showNormal()QWidget::showMaximized()QWidget::showFullscreen()来实现这一目标。

首先让我解释一下有什么作用:

  1. 从正常到最大化再回来工作。 Qt会记住正常窗口的窗口大小和位置,然后在退出最大化状态时恢复它。
  2. 从正常到全屏并返回工作。此外,还保持正常窗口的大小和位置。
  3. 什么不起作用?

    从正常到最大化,然后到全屏,返回到最大化,然后恢复到正常,不能按预期工作。在最大化之前,窗口不会调整为原来的大小。相反,窗口将与屏幕一样大(基本上与OS允许窗口一样大)。

    如果我现在再次进入全屏,那么在右上角和底部边缘会出现奇怪的瑕疵,看起来看起来像是旧视觉效果禁用的旧Vista窗口框架的一部分。

    这是一张图片,应该说明我刚刚解释的过程:

    enter image description here

    我尝试使用QWidget::saveGeometry()保存窗口的最后一个大小,或者只是在窗口状态更改事件发生时保存QWidget::size()获得的大小,但总是出现奇怪的行为。除此之外,再次全屏播放的最后一步看起来像是一个错误。

    您怎么看?

    更新:

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

2 个答案:

答案 0 :(得分:2)

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

进入全屏时

if (wasMaximized = isMaximized())
{
    setVisible(false);  // prevents window animation on showNormal() call 
    showNormal();
    setVisible(true);
}
showFullScreen();
从全屏返回时

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

答案 1 :(得分:0)

新的Qt 5.6版本明显修复了这个错误。