特定のWindows PCで空白のウィンドウを表示しているQt Quick 2アプリ(QML)があります。どのようにこれを治すためのアイデアですか?Windows 7のANGLEでQtを使用した場合の空白ウィンドウ
Qt Quick 2がOpenGL 2.0を使用する必要があるため、一部のWindows PC、特にIntelグラフィックスカードを搭載したPCでこのような問題が発生しています。私が採用した解決策は、Windows用にコンパイルするときにANGLEを強制的に使用することです。空白のウィンドウ(通常は白)を表示し、離れた場所に移動してアプリケーションに戻ると再描画に失敗する2台のPCを除いて、これは非常に成功しています。
以下は、この問題を示す短いテストアプリです。 ANGLEの使用を確認するには、正常に動作しているときは、緑色の背景と円形の白色マウスカーソルが表示されます。 ANGLEが使用されていない場合、赤い背景とマウスカーソル(MacOSなど)が表示されます。あなたは決して空白の窓を得るべきではありません。
問題が発生したPCは、Windows 7 32ビットHome Premium SP1を実行していて、Intel Graphics Media Accelerator 3600シリーズ(Atom N2800)を搭載しています。
test.pro
TEMPLATE = app
TARGET = Test
QT += qml quick
SOURCES += main.cpp
RESOURCES += qml.qrc
main.cppに
#include <QGuiApplication>
#include <QQmlEngine>
#include <QQuickView>
int main(int argc, char *argv[])
{
#ifdef Q_OS_WIN
QGuiApplication::setAttribute(Qt::AA_UseOpenGLES);
#endif
QGuiApplication app(argc, argv);
QQuickView *view = new QQuickView;
view->connect(view->engine(), SIGNAL(quit()), &app, SLOT(quit()));
view->setSource((QUrl(QStringLiteral("qrc:/qml/main.qml"))));
view->show();
return app.exec();
}
qml.qrc
<RCC>
<qresource prefix="/">
<file>qml/main.qml</file>
</qresource>
</RCC>
QML/main.qml
import QtQuick 2.5
Rectangle {
id: root
width: 600
height: 400
color: (OpenGLInfo.renderableType == OpenGLInfo.Unspecified?
'#333': (OpenGLInfo.renderableType == OpenGLInfo.OpenGL?
'#c00': '#0c0'))
MouseArea {
id: mainMouseArea
anchors.fill: parent
hoverEnabled: true
onPositionChanged: mousePointer.position = Qt.point(mouse.x, mouse.y)
}
Rectangle {
id: mousePointer
property point position: Qt.point(-1000,-1000)
width: 60
height: width
radius: width/2
x: position.x - width/2
y: position.y - height/2
color: "white"
}
}
GPUがANGLEで動作していない可能性があります。私はいくつかのGPUがネイティブ/デスクトップで動作しないことを知っていますが、ANGLEに問題があるかもしれないことを認識していませんでした。 私はqpa-doを有効にしようとします。main.cppのQProcessEnvironmentを使って環境変数を設定するか、.proで実行できますか? –
実行可能ファイルを実行する前に、またはQt Creatorの 'run'設定を介して、cmdプロンプト(' set QT_LOGGING_RULES = qt.qpa.gl = true')でグローバルに(コントロールパネル - >システム)残念ながら、QProcessEnvironmentやその他のプログラムによる方法を使用することは遅すぎます。 – Mathias
ありがとうございます。ちょうど問題のあるPCで再テストする機会がありました。私はすでにそれが最新のドライバを持っていることを確認していたので、今回はOpenGLソフトウェアのレンダリングをテストしましたが、これで問題が分類されました。甘い。 –