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的数,即可去除。 width: Screen.width + 1; height: Screen.height; } |
---|
Window 的属性中width或height加上一个不为0的数值
简易版的复现代码:
import QtQuick 2.6 import QtQuick.Window 2.2 Window { visible: true //宽或高加减一个不等于0的数,即可去除。 //width: Screen.width+1; width: 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" width: parent.width; height: parent.height; } } |
触发条件:
1、Windows属性设置“全屏”
width: Screen.width;
height: Screen.height;
2、Windows标识设置“无边框窗口”
flags: Qt.FramelessWindowHint
备注:
1、只能修改Window的width或height属性。如果修改上述代码中Text的width或height属性,仍然无法规避。
2、该规避措施仅适用于Windows操作系统;Linux操作系统不生效,无法规避。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架