Черный прямоугольник вместо QQuickWidget (конкретный вариант использования). Проблемы с OpenGL
Мы используем QT версии 5.6 У нас есть приложение C++ на Qt Widgets. В каком-то плагине (созданном с помощью Q_PLUGIN_METADATA и Q_INTERFACES) этого приложения мы используем QML: в некоторых виджетах мы создаем 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.
Также мы пытаемся установить флаг Qt::AA_UseSoftwareOpenGL для основного QApplication (до построения QApplication), но эта операция не дает результатов.
Стабильное воспроизведение у нас на виртуальной машине с Win7.
QQuickWidget на виртуальной машине выглядит хорошо после добавления видеоадаптера RemoteFX 3D. Но можем ли мы показать QQuickWidget без 3D видеоадаптера RemoteFX?
после создания 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
Где проблема?
1 ответ
У меня та же проблема с QQuickWidget, когда:
QQuickWidget * w = new QQuickWidget(this);
w->setSource(QUrl("qrc:///main.qml"));
w->show();
Все было в порядке, когда я компилировал с QtCreator, но когда я запускал исполняемый файл на другом ПК (с видеокартами Intel), на некоторых приложение вылетало, а на другом - "черный экран".
Это было, например, из-за того, что на втором ПК установлена видеокарта Intel 945. Проблема была в OpenGL.
Qt Quick требует OpenGL 2.0 или выше. Тем не менее, Intel 945 поддерживает только до OpenGL 1.4
Итак... я начинаю использовать QQuickView вместо QQuickWidget