:この関数はすぐに戻りますので、QML文字列が新しいコンポーネントをロードする場合は動作しない可能性があること私はドキュメントを誤解していますか、Qt.createQmlObject(ほとんど)役に立たないですか? <a href="http://doc.qt.io/qt-5/qml-qtqml-qt.html#createQmlObject-method" rel="nofollow noreferrer">the Qt docs</a>から
注意(つまり、まだロードされていない外部のQMLファイルです)。このような場合は、Qt.createComponent()を代わりに使用することを検討してください。
しかし、私の知る限り、すべて QMLファイルが「外部」であり、それらのいずれかは、その負荷が長い任意に遅れがあります。
など。私はこれを行う場合:
Qt.createQmlObject('\
import QtQuick 2.0\n\
Rectangle { }
',
parentObject,
"myRect");
をRectangleが、私はこのコードを実行する時間によってロードされていない場合はどうなりますか?このロジックによって、Qt.createQmlObject
を使用するコードでは、渡された文字列のインポートが危険です。したがって、常にQt.createComponent
を代わりに使用する必要があります。
私はこれらのドキュメントを誤解しているとはかなり確信していますが、それらの正しい解釈が何であるか分かりません。
'createComponent()'は異なります。メモリ内の文字列からは機能しません。外部ファイルへのURIが必要です。ここでは非同期読み込みが許可されていますが、同期と非同期のどちらかを選択できます。 – dtech
@ddriver:わかったよ。私が言っていることは、 'Qt.createComponent'は' Qt.createQmlObject'の代わりになる可能性がありますが、メモリ内の文字列ではなく外部のファイルに読み込まれます。そして、 'Qt.createQmlObject'には致命的な問題はありません。 –
私はそれをテストしていないが、ファイルがローカルで利用可能で、モジュールがインポートパスにある限り、createQmlObjectは問題ないと思われる。生成されたコードに依存する場合は、文字列をファイルとして保存し、createComponentを使用するだけで安全な側に置くことができます。 – dtech