2

我们使用 QT 5.6 版我们在 Qt Widgets 上有 c++ 应用程序。在此应用程序的某些插件(使用 Q_PLUGIN_METADATA 和 Q_INTERFACES 创建)中,我们使用 QML:在某些 Widget 中,我们创建 QQuickWidget

QQuickWidget* quickWidget = new QQuickWidget(this);

使用上下文进行一些操作

QQmlContext* ctxt = quickWidget->rootContext();

并设置源

quickWidget->setSource(QUrl(QStringLiteral("qrc:/Resources/WebResources/main.qml")));

有时我们在显示此小部件时遇到问题 - 出现黑色矩形。

我们添加了 libEGL.dll、libGLESv2.dll、d3dcompiler_47.dll 和 opengl32sw.dll。

此外,我们尝试为主 QApplication 设置 Qt::AA_UseSoftwareOpenGL 标志(在 QApplication 构造之前),但此操作没有给出结果。

我们在使用 Win7 的虚拟机上进行了稳定的复制。

添加 RemoteFX 3D 视频适配器后,Virtual mashine 上的 QQuickWidget 看起来不错。但是我们可以在没有 RemoteFX 3D 视频适配器的情况下显示 QQuickWidget 吗?

在此处输入图像描述

QQuickWidget 创建后我们在 WinDBG

ModLoad: 6ee10000 6ee18000   C:\Users\admin\Desktop\Release\Win32\QtQuick.2\qtquick2plugin.dll
ModLoad: 66c50000 66cfd000   C:\Users\admin\Desktop\Release\Win32\QtQuick\Controls\qtquickcontrolsplugin.dll
ModLoad: 6ee00000 6ee08000   C:\Users\admin\Desktop\Release\Win32\QtQuick\Window.2\windowplugin.dll
ModLoad: 656a0000 65863000   C:\Windows\system32\d3d9.dll
ModLoad: 749b0000 749b9000   C:\Windows\system32\VERSION.dll
ModLoad: 6edf0000 6edf6000   C:\Windows\system32\d3d8thk.dll
ModLoad: 662f0000 663b8000   C:\Windows\system32\opengl32.dll
ModLoad: 6dc80000 6dca2000   C:\Windows\system32\GLU32.dll
ModLoad: 655b0000 65697000   C:\Windows\system32\DDRAW.dll
ModLoad: 6edd0000 6edd6000   C:\Windows\system32\DCIMAN32.dll
ModLoad: 6d7f0000 6d7f7000   C:\Users\admin\Desktop\Release\Win32\libEGL.DLL
ModLoad: 65420000 655ac000   C:\Users\admin\Desktop\Release\Win32\libGLESv2.dll
ModLoad: 650c0000 65416000   C:\Users\admin\Desktop\Release\Win32\d3dcompiler_47.dll
ModLoad: 74550000 745d3000   C:\Windows\system32\dxgi.dll
ModLoad: 66bc0000 66c43000   C:\Windows\system32\d3d11.dll
ModLoad: 75730000 7575d000   C:\Windows\system32\WINTRUST.dll
ModLoad: 64d60000 650b6000   C:\Users\admin\Desktop\Release\Win32\d3dcompiler_47.dll
ModLoad: 74550000 745d3000   C:\Windows\system32\dxgi.dll
ModLoad: 66260000 662e3000   C:\Windows\system32\d3d11.dll
ModLoad: 650c0000 65416000   C:\Users\admin\Desktop\Release\Win32\d3dcompiler_47.dll
QWindowsEGLStaticContext::create: Could not initialize EGL display: error 0x3001
QWindowsEGLStaticContext::create: When using ANGLE, check if d3dcompiler_4x.dll is available
ModLoad: 64530000 65411000   C:\Users\admin\Desktop\Release\Win32\opengl32sw.dll
ModLoad: 75a80000 75aaa000   C:\Windows\system32\imagehlp.dll
ModLoad: 6da80000 6db6b000   C:\Windows\system32\dbghelp.dll

问题出在哪里?

4

1 回答 1

0

在以下情况下,我对 QQuickWidget 有同样的问题:

QQuickWidget * w = new QQuickWidget(this);
w->setSource(QUrl("qrc:///main.qml"));
w->show();

当我使用 QtCreator 编译时一切正常,但是当我在另一台 PC(使用英特尔显卡)上运行可执行文件时,在某些应用程序上崩溃,但在另一些上是“黑屏”。

这是因为,例如,第二台 PC 的显卡为 Intel 945。问题出在 OpenGL 中。

Qt Quick 需要 OpenGL 2.0 或更高版本。但是,Intel 945 最多只支持 OpenGL 1.4

所以...我开始使用 QQuickView 而不是 QQuickWidget

于 2017-04-26T12:42:57.857 回答