7

C++ から QML オブジェクトを動的にインスタンス化することは十分に文書化されていますが、私が見つけられないのは、そのプロパティの事前に指定された値でインスタンス化する方法です。

たとえば、次のSplitViewように C++ を少し変更して作成しています。

QQmlEngine* engine = QtQml::qmlEngine( this );
QQmlComponent splitComp( engine, QUrl( "qrc:/qml/Sy_splitView.qml" ) );
QObject* splitter = splitComp.create();

splitter->setProperty( "orientation", QVariant::fromValue( orientation ) );

orientation私が抱えている問題は、インスタンス化されたSplitView にを指定すると、内部レイアウトが壊れることです。それで、すでに指定された を作成する方法はありSplitViewますorientationか?

別の方法として、水平バージョンと垂直バージョンの両方SplitViewを別々のファイルに作成し、実行時に適切なものをインスタンス化することもできますが、これはあまりエレガントではありません。

アップデート

私が見つけたQQmlComponent::beginCreate(QQmlContext* publicContext)

QQmlEngine* engine = QtQml::qmlEngine( this );
QQmlComponent splitComp( engine, QUrl( "qrc:/qml/Sy_splitView.qml" ) );
QObject* splitter = splitComp.beginCreate( engine->contextForObject( this ) );

splitter->setProperty( "orientation", QVariant::fromValue( orientation ) );
splitter->setParent( parent() );
splitter->setProperty( "parent", QVariant::fromValue( parent() ) );
splitComp.completeCreate();

しかし、驚くほど効果がありませんでした。

4

3 に答える 3