Windows上的Qt 5.7黑屏

Posted

技术标签:

【中文标题】Windows上的Qt 5.7黑屏【英文标题】:Qt 5.7 black screen on windows 【发布时间】:2016-07-23 10:55:01 【问题描述】:

我刚刚升级我的项目以使用 Qt 5.7,在 Mac 上我可以使用 Qt Webengine 加载 html 页面,但在 Window 7 上,页面不显示,而是显示黑屏。

我还编译了简单的浏览器示例,它也只显示黑屏。

我正在使用 Qt 5.7 的 Visual Studio 2013 版本

有谁知道为什么它不显示页面。

Qt 5.7 是否需要任何第三方库才能在 Windows 上正确呈现。

【问题讨论】:

闻起来像损坏的 GPU 驱动程序。您可以尝试升级它们吗? 检查了我的显卡驱动程序,它们是最新的 你有哪个 GPU?什么版本的驱动程序? NVIDIA 版本 10.18.13.6900,我尝试安装不同的 windows 7 机器,但我遇到了同样的问题 删除图形驱动程序并重新安装驱动程序可以解决问题。但是,由于我们安装软件的每台机器都会出现此问题,因此此解决方案无法为我们的用户工作,因为他们不具备执行此操作的计算机知识。 【参考方案1】:

我们遇到了类似的问题,每当我们使用 QWebEngineView 启动应用程序时,它只会显示黑屏甚至在另一台机器上崩溃。问题是由于我们在应用中打包的 api-ms-*.dlls 和 d3dcompiler_47.dll 版本错误造成的。

我们在“C:\Program Files (x86)\Windows Kits\10\Redist”下安装了 Windows SDK 的开发人员机器上找到了正确的版本。

附带说明:我们发现在 windows 下部署 QWebEngine 非常麻烦。您还需要包括来自 qtbase\translations 的“qtwebengine_locales”和来自 qtbase 的“resources”以及来自 qtbase 的“QtWebEngineProcess.exe” \bin。

有助于追踪问题的方法是将“CONFIG += 控制台”放入配置文件中。这样,带有相关错误信息的控制台输出就会显示在部署目标上。

【讨论】:

【参考方案2】:

在peppe 的this comment 的帮助下

可以对不支持 DirectX11 但支持 DirectX9 的图形驱动程序使用临时解决方法

这里说的

https://doc.qt.io/qt-5/windows-requirements.html#dynamically-loading-graphics-drivers

图形驱动程序 要使 Qt Quick 2 工作,需要提供 OpenGL 2.1 或更高版本的图形驱动程序。 Windows 的默认驱动程序是 OpenGL 1.1。 Qt 包含一个版本的 ANGLE 项目,它包含在 Windows Qt 安装程序中。 ANGLE 在 DirectX 11 或 DirectX 9 之上实现了 OpenGL ES 2.0 API。ANGLE 要求在构建 Qt 时安装 DirectX SDK。

ANGLE 根据可用性选择渲染后端。 DirectX 11 通常是首选。但是,某些显卡可能不完全支持它。对于这些情况,可以使用环境变量 QT_ANGLE_PLATFORM(在 Qt 5.4 中引入)来控制渲染后端。可能的值是 d3d11、d3d9 和 warp。

所以这可能会有所帮助

set QT_ANGLE_PLATFORM=d3d9

或将台面与

一起使用

https://www.mesa3d.org/llvmpipe.html

Qt::AA_UseSoftwareOpenGL 的特殊之处在于它会尝试使用非标准名称加载 OpenGL 实现。默认名称是 opengl32sw.dll。这允许使用此名称发布纯软件 OpenGL 实现,例如使用 llvmpipe 构建的 Mesa。如有必要,可以通过设置 QT_OPENGL_DLL 环境变量来覆盖文件名。

编辑 1:

例如,可以使用回退方法一次性登录 Dropbox Windows 客户端(使用 QT 框架制作)

动态加载图形驱动程序 除了构建时配置之外,Qt 还支持在运行时选择和加载 OpenGL 实现。要使用此模式,请将 -opengl dynamic 传递给配置脚本。

注意:从 Qt 5.5 开始,这是官方预构建的 Qt 二进制包所使用的配置。强烈建议在自定义构建中也使用它,尤其是与应用程序一起部署的 Qt 二进制文件。

...

此配置是最灵活的,因为在构建期间没有硬编码有关 OpenGL 实现的依赖项或假设。它允许强大的应用程序部署。当给定环境无法提供正确的 OpenGL 2.0 实现时,它将自动回退到 ANGLE。此回退对应用程序完全透明,并允许 Qt Quick 或其他 OpenGL 代码通过转换为 Direct3D 来运行。 例如,这种回退可能发生在没有安装额外图形驱动程序的 Windows 7 PC 上。 在其他有足够 OpenGL 支持的机器上,将使用普通的桌面 OpenGL 驱动程序。此外,纯基于软件的 OpenGL 实现可能会在未来作为额外的备用方案提供,允许在没有 GPU 的情况下运行 Qt Quick 应用程序。

当使用 -opengl dynamic 配置时,Qt 和使用 qmake 构建的应用程序都不会链接到 opengl32(标准桌面 OpenGL)或 QtANGLE 库。相反,在运行时选择适当的库。默认情况下,Qt 会判断系统的 opengl32.dll 是否提供 OpenGL 2 功能。如果这些存在,则使用 opengl32.dll,否则将使用 ANGLE 库(libEGL.dll 和 libGLESv2.dll)。如果 ANGLE 库丢失或由于某种原因初始化失败,则会通过尝试加载 opengl32sw.dll 来尝试额外的回退。详情见下文。

例如,这种回退可能发生在装有 Windows 7 的 PC 上 没有安装额外的图形驱动程序。

要模拟这种情况,可以使用 RDP 会话,强制 8 bpp 到 Windows 机器

【讨论】:

以上是关于Windows上的Qt 5.7黑屏的主要内容,如果未能解决你的问题,请参考以下文章

QT 在安卓模拟器上调试总是黑屏状态,还啥都没显示,编译输出进程"..正常退出。

使用 MinGW 静态构建 Qt 5.7 时,如何解决此构建错误?

在VS2017上的Xamarin iOS模拟器在Windows中显示黑屏

某些机器上的 OpenGL 中的黑屏(PIXELFORMATDESCRIPTOR/SwapBuffer?)

Laravel 5.7 无法连接到 Windows 上的 SQLSRV 数据库(找不到驱动程序)

Qt 快速控制 2 和 Windows Phone 10