首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt:切换到最大化状态,然后切换到全屏时“正常”窗口大小丢失。

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

Stack Overflow用户
提问于 2015-10-25 17:17:41
回答 3查看 2.3K关注 0票数 2

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

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

  1. 从正常到最大化和返回工作。Qt记住普通窗口的窗口大小和位置,然后在退出最大化状态时恢复该窗口。
  2. 从正常到全屏和背面工作。这里也保持正常窗口的大小和位置。

什么不管用?

当从正常到最大化,然后到全屏,回到最大化,然后回到正常,不像预期的工作。在最大化之前,窗口不会调整到原来的大小。相反,窗口将和屏幕一样大(基本上是操作系统允许的大小)。

如果我现在再转到全屏幕,然后在右上角和底部边缘有一些奇怪的工件,看起来就像旧Vista窗口框架的一部分,视觉效果被禁用。

下面是一幅应该说明我刚才解释的过程的图片:

我尝试使用QWidget::saveGeometry()保存窗口的最后大小,或者只是在发生窗口状态更改事件时保存由QWidget::size()获得的大小,但总会出现异常行为的情况。除此之外,在我看来,最后一步的全屏操作看起来就像一个bug。

你认为如何?

更新:

如果我在最后一步之前手动调整窗口的大小(到任意大小)(这将再次进入全屏幕),则全屏可以正常工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-17 14:34:05

新的Qt5.6版本显然修复了这个错误。

票数 0
EN

Stack Overflow用户

发布于 2016-03-16 07:38:26

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

当进入全屏时

代码语言:javascript
运行
复制
if (wasMaximized = isMaximized())
{
    setVisible(false);  // prevents window animation on showNormal() call 
    showNormal();
    setVisible(true);
}
showFullScreen();

从全屏返回时

代码语言:javascript
运行
复制
if (isFullScreen())
{
    if (wasMaximized)
        showMaximized();
    else
        showNormal();
}
票数 4
EN

Stack Overflow用户

发布于 2022-08-31 08:37:19

这对你有帮助

代码语言:javascript
运行
复制
void toggleFullScreen()
{
    if (isFullScreen()) {
        if (wasMaximized) {
            showMaximized();
        } else {
            showNormal();
        }
    } else {
        wasMaximized = isMaximized();
        showFullScreen();
    }
}

您需要自己声明wasMaximized (它必须是MainWindow类的全局变量)

我的英语很差,所以我无法解释所有这些代码。抱歉的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33332596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档