Qt 5.7在窗户上的黑屏

时间:2016-07-23 10:55:02

标签: c++ windows qt visual-studio-2013 qtwebengine

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

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

我正在使用Qt 5.7的visual studio 2013版本

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

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

2 个答案:

答案 0 :(得分:1)

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

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

旁注:我们发现在Windows下部署QWebEngine非常麻烦......你还需要包含" qtwebengine_locales"来自qtbase \ translations和" resources"来自qtbase以及" QtWebEngineProcess.exe"来自qtbase \ bin。

帮助追踪问题的一个方面就是放置" CONFIG + = console"在亲文件中。这样,具有相关错误信息的控制台输出显示在部署目标上。

答案 1 :(得分:0)

借助this comment中的peppe

对于不支持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包含Windows Qt安装程序中包含的ANGLE项目版本。 ANGLE在DirectX 11或DirectX 9的基础上实现OpenGL ES 2.0API。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传递给configure脚本。

注意:从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上:   没有安装其他图形驱动程序。

要模拟这种情况,可以在Windows计算机上强制使用8 bpp的RDP会话