我有一个Qt应用程序,它可以显示“普通”(既不最大化也不最小化的普通窗口)、最大化或全屏。我通过调用函数QWidget::showNormal()
、QWidget::showMaximized()
和QWidget::showFullscreen()
来实现这一点。
首先,让我解释一下什么是有效的:
什么不管用?
当从正常到最大化,然后到全屏,回到最大化,然后回到正常,不像预期的工作。在最大化之前,窗口不会调整到原来的大小。相反,窗口将和屏幕一样大(基本上是操作系统允许的大小)。
如果我现在再转到全屏幕,然后在右上角和底部边缘有一些奇怪的工件,看起来就像旧Vista窗口框架的一部分,视觉效果被禁用。
下面是一幅应该说明我刚才解释的过程的图片:
我尝试使用QWidget::saveGeometry()
保存窗口的最后大小,或者只是在发生窗口状态更改事件时保存由QWidget::size()
获得的大小,但总会出现异常行为的情况。除此之外,在我看来,最后一步的全屏操作看起来就像一个bug。
你认为如何?
更新:
如果我在最后一步之前手动调整窗口的大小(到任意大小)(这将再次进入全屏幕),则全屏可以正常工作。
发布于 2016-03-17 14:34:05
新的Qt5.6版本显然修复了这个错误。
发布于 2016-03-16 07:38:26
当窗口最大化并进入全屏时,尝试在showNormal()
之前执行showFullScreen()
操作。
当进入全屏时
if (wasMaximized = isMaximized())
{
setVisible(false); // prevents window animation on showNormal() call
showNormal();
setVisible(true);
}
showFullScreen();
从全屏返回时
if (isFullScreen())
{
if (wasMaximized)
showMaximized();
else
showNormal();
}
发布于 2022-08-31 08:37:19
这对你有帮助
void toggleFullScreen()
{
if (isFullScreen()) {
if (wasMaximized) {
showMaximized();
} else {
showNormal();
}
} else {
wasMaximized = isMaximized();
showFullScreen();
}
}
您需要自己声明wasMaximized
(它必须是MainWindow类的全局变量)
我的英语很差,所以我无法解释所有这些代码。抱歉的
https://stackoverflow.com/questions/33332596
复制相似问题