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();
しかし、驚くほど効果がありませんでした。