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()
.
来实现这一点
首先让我解释一下什么是有效的:
- 从正常到最大化然后返回正常。 Qt 记住正常 window 的 window 大小和位置,然后在退出最大化状态时恢复它。
- 从正常到全屏,然后返回正常。这里也保持正常 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 版本显然修复了该错误。
我有一个 Qt 应用程序,它可以 "normal"(正常的 window,既不最大化也不最小化)、最大化或全屏显示。我通过调用函数 QWidget::showNormal()
、QWidget::showMaximized()
和 QWidget::showFullscreen()
.
首先让我解释一下什么是有效的:
- 从正常到最大化然后返回正常。 Qt 记住正常 window 的 window 大小和位置,然后在退出最大化状态时恢复它。
- 从正常到全屏,然后返回正常。这里也保持正常 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 版本显然修复了该错误。