Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt:;“正常”;切换到最大化状态然后切换到全屏时窗口大小丢失_Qt_Window_Size_Fullscreen - Fatal编程技术网

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

Qt:;“正常”;切换到最大化状态然后切换到全屏时窗口大小丢失,qt,window,size,fullscreen,Qt,Window,Size,Fullscreen,我有一个Qt应用程序,它可以显示“正常”(一个既不最大化也不最小化的正常窗口)、最大化或全屏。我通过调用函数QWidget::showNormal(),QWidget::showMaximized()和QWidget::showFullscreen()来实现这一点 首先让我解释一下什么是有效的: 从正常到最大化和反向工作。Qt记住正常窗口的窗口大小和位置,然后在退出最大化状态时恢复 从普通屏幕到全屏屏幕,再回到工作状态。在这里,正常窗口的大小和位置也保持不变 什么不起作用 当从正常到最大化,再到

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

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

  • 从正常到最大化和反向工作。Qt记住正常窗口的窗口大小和位置,然后在退出最大化状态时恢复
  • 从普通屏幕到全屏屏幕,再回到工作状态。在这里,正常窗口的大小和位置也保持不变
  • 什么不起作用

    当从正常到最大化,再到全屏,再回到最大化,再回到正常时,无法按预期工作。在最大化之前,窗口的大小不会调整为原来的大小。相反,窗口将与屏幕一样大(基本上与操作系统允许的窗口一样大)

    如果我现在再次进入全屏,那么在右上角和下边缘有一些奇怪的工件,看起来像是禁用了视觉效果的旧Vista窗口框架的一部分

    下面是一幅图片,可以说明我刚才解释的过程:

    当发生窗口状态更改事件时,我尝试使用
    QWidget::saveGeometry()
    保存窗口的最后一个大小,或者仅保存通过
    QWidget::size()
    获得的大小,但总是会出现行为异常的情况。除此之外,再次全屏播放的最后一步对我来说就像一个bug

    你觉得怎么样

    更新:

    如果在最后一步(再次全屏显示)之前手动调整窗口大小(任意大小),则全屏显示不会出现问题。

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

    当进入全屏时

    if (wasMaximized = isMaximized())
    {
        setVisible(false);  // prevents window animation on showNormal() call 
        showNormal();
        setVisible(true);
    }
    showFullScreen();
    
    if (isFullScreen())
    {
        if (wasMaximized)
            showMaximized();
        else
            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版本吗?这很重要,以防它可能是一个bug。这是最新的5.5.1。这是一个解决方法,但它不是很好。即使使用
    setVisible
    也会有一段时间屏幕呈白色。我只是希望他们能修复这个bug…(也许我会尝试新的5.6版本)5.6版本显然真的解决了这个问题。