zoukankan      html  css  js  c++  java
  • Qml之Windows全屏属性导致黑屏

    环境

    系统:Windows10 64位 
    Qt版本:5.9.0 msvc2015 64位
    编译器:Visual Studio 2015 专业版

    背景

          需要实现一个全屏化的弹窗。没有其他任何的窗口,只有一个个的弹窗。

    方式:

        1、设置一个透明化的全屏窗口。

        2、每一个弹窗都基于全屏化的窗口来展示。

    期望效果图:

    结果实现效果图:

    原因

    据网络相关的issue分析:其根本原因是“失焦”

    可能原因:

    1、Windows对全屏窗口有特殊的处理,跟常规窗口不同。
    2、Qt Quick使用硬件加速,据说在Windows是基于GLFW实现,这里面有些奇怪的feature,似乎是全屏窗口失焦时会停止渲染。
    3、与Windows系统合成器对全屏OpenGL窗口的特殊处理有关。

    最终,仍然没有明确的原因。

    参考链接:

    https://bugreports.qt.io/browse/QTBUG-56326

    https://bugreports.qt.io/browse/QTBUG-74151

    https://blog.csdn.net/chase_hung/article/details/80863531

    https://www.mimec.org/blog/fullscreen-mode-in-qtquick

    解决方案

       (因为不明确引发该问题的根本原因,因此只有规避措施)

         目前的主流规避手段就是,不要设置真全屏窗口,要假全屏。即设置程序的显示大小,不要刚好等于屏幕大小

    比如:

    Window {

        visible: true

     

       //宽或高加减一个不等于0的数,即可去除。

        Screen.width + 1; 

       height: Screen.height;

    }

    Window 的属性中width或height加上一个不为0的数值

    简易版的复现代码:

    import QtQuick 2.6
    import QtQuick.Window 2.2
     
    Window {
        visible: true
     
        //宽或高加减一个不等于0的数,即可去除。
        // Screen.width+1;
         Screen.width;
        height: Screen.height;
        color: "#00000000"
     
        flags: Qt.FramelessWindowHint
     
        Text {
            id: text;
            text: qsTr("text");
            font.family: 'Microsoft YaHei'
            font.pixelSize: 150
            color: "blue"
             parent.width;
            height: parent.height;
        }
    }

    触发条件:

    1、Windows属性设置“全屏”

        Screen.width;
       height: Screen.height;
    2、Windows标识设置“无边框窗口”
       flags: Qt.FramelessWindowHint

    备注:

    1、只能修改Window的width或height属性。如果修改上述代码中Text的width或height属性,仍然无法规避。

    2、该规避措施仅适用于Windows操作系统;Linux操作系统不生效,无法规避。

  • 相关阅读:
    路径
    JSTL-3
    JSTL-2
    JSTL-1
    EL和JSTL的关系
    Mybatis控制台打印SQL语句的两种方式
    centOS7安装JDK
    centOS7下安装GUI图形界面
    centOS7配置IP地址
    Office2016专业增强版永久激活
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/15027897.html
Copyright © 2011-2022 走看看