問題タブ [qqmlengine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
558 参照

c++ - Qt C++ 単体テストで QQuickWidget の代わりに QQuickWindow を動的にロードする

私たちのプロジェクトには、QML ソースの C++ 単体テストがあります。次のコードを使用して、コンポーネントを動的にロードしてさらに処理します

次のようなqmlコンポーネントではうまくいきました:

my.qml:

ただし、コンポーネントをラップするとDialog

それは動作を停止しました:

エラー: QQuickWidgetから派生したルート オブジェクトのロードのみをサポートしますQQuickItem

であると予想されDialogますQQuickWindow。ただし、この https://doc.qt.io/qt-5/qquickview.html#details のようQQuickItemにロードしようとしています:QQuickView

上記のエラーでも失敗します。QQmlApplicationEngineそして、ここのようにロードしますhttps://stackoverflow.com/a/23936741/630169 :

別のエラーで失敗します:

QQmlApplicationEngineコンポーネントの読み込みに失敗しました
QWARN:MyTest::myMethodTest()モジュール " mynamespace.mymodule" はインストールされていません
QWARN:MyTest::myMethodTest()モジュール " mynamespace.mymodule" はインストールされていません
...

view->setSource()このモジュールをRectangleitemに対して正しくロードQQmlApplicationEngineし、同じ item qml ソースに対して失敗するのはなぜDialogですか?

注:これらのモジュールは C++ であり、view->setSource().

QQmlComponentドキュメントに記載されているように使用してロードしようとすると: https://doc.qt.io/qt-5/qqmlcomponent.html#details :

  • その後、別のエラーが発生します:

    QQmlComponent: コンポーネントの準備ができていません

呼び出されない場合engine->addImportPath()、クラッシュします

場所: [不明なファイル(0)]

呼び出し時のエラーengine->addImportPath()

正しくロードDialog( ) し、テストのために C++QQuickWindowでルートを取得する方法は? QQuickItem何か案は?ありがとう!

0 投票する
0 に答える
271 参照

qt - Qt - QQuickView()、GUI をフリーズせずに setSource

QT バージョン 5.15.0. MinGW 8.1.0、64 ビット

この問題は、QML ファイルにマップ プラグインをロードする場合にのみ発生するようです。以下はコードの抜粋です。少なくとも 2 秒間待機すると、GUI がフリーズします。基本的に、GUI スレッドは 2 秒間ブロックされます。別のスレッドで qmlView->setSource(QUrl("qrc:/maps/map.qml")) を呼び出そうとしましたが、クラッシュしました。同じ GUI スレッドであるため、ローダー QML タイプが機能するかどうかはわかりません。

プロバイダーを変更すると、メイン GUI もフリーズします

GUI がフリーズしない QML ファイルをロードする方法はありますか? ありがとう

QMLファイルは

JarMan からの入力の後、QML ローダーを使用しようとしましたが、以下を参照してください。ただし、GUI はまだフリーズしています。