Create QML object from C++ with specified properties(从C++创建具有指定属性的QML对象)
问题描述
从C++动态实例化QML对象是well documented,但我找不到的是如何用它的属性的预先指定的值来实例化它。
例如,我正在从C++创建一个稍微修改过的SplitView
,如下所示:
QQmlEngine* engine = QtQml::qmlEngine( this );
QQmlComponent splitComp( engine, QUrl( "qrc:/qml/Sy_splitView.qml" ) );
QObject* splitter = splitComp.create();
splitter->setProperty( "orientation", QVariant::fromValue( orientation ) );
我遇到的问题是,在之后指定SplitView
的orientation
会导致其内部布局中断。那么,有没有办法用已经指定的orientation
来创建SplitView
呢?
或者,我可以在单独的文件中创建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();
但出人意料地没有效果。
推荐答案
对于仍然对此问题感兴趣的人,在Qt 5(因此Qt 6)中,您还可以使用QQmlContext和QQmlContext::setContextProperty()
来设置外部属性(在您的情况下是orientation
):
QQmlEngine engine;
QQmlContext *context = new QQmlContext(engine.rootContext());
context->setContextProperty("myCustomOrientation", QVariant::fromValue(orientation));
// you can use a 'myCustomOrientation' property inside Sy_splitView.qml, e.g.
// `orientation: myCustomOrientation`
QQmlComponent splitComp(&engine, QUrl("qrc:/qml/Sy_splitView.qml"));
QObject* splitter = splitComp.create(context);
这应该允许您不摆弄beginCreate
和completeCreate
。
这篇关于从C++创建具有指定属性的QML对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从C++创建具有指定属性的QML对象


基础教程推荐
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 设计字符串本地化的最佳方法 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01