从 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
of会导致其内部布局中断。那么,有没有一种方法可以创建已经指定的?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();
但出乎意料的没有效果。