如何在 QML 中访问 C++ 类对象,而不是在 QML 中创建单独的对象?
Posted
技术标签:
【中文标题】如何在 QML 中访问 C++ 类对象,而不是在 QML 中创建单独的对象?【英文标题】:How to access a C++ class object in QML rather than creating a separate object in QML? 【发布时间】:2014-01-08 10:57:29 【问题描述】:假设有一个 C++ 类,其中包含信号和一些可从 QML 访问的函数。 现在,为了在 QML 中访问该类的成员,我编写了如下内容:
myClass
id: abc
x: 100
onXChanged: console.log ("xx");
假设 x
是实际 C++ 类的成员,上述代码确实有效。
现在,我有一个 C++ 类的对象,即在相关 C++ 文件中创建的 myClass
。
问题:在 QML 中访问和使用已经创建的 C++ 对象,而不是在 QML 中创建同一类的新对象是否可行且合理?
【问题讨论】:
【参考方案1】:您可以为此使用上下文属性。你会这样写:
...
MyClass myClassObject;
QQuickView view;
view.rootContext()->setContextProperty("myClassContextProperty", &myClassObject);
view->setSource(QUrl::fromLocalFile("main.qml"));
view->show();
...
然后你可以在 qml 中访问它,如下所示:
Button
onClicked: myClassContextProperty.x = 100
【讨论】:
以上是关于如何在 QML 中访问 C++ 类对象,而不是在 QML 中创建单独的对象?的主要内容,如果未能解决你的问题,请参考以下文章
在 QML 中创建自定义 C++ 对象并将其存储在 C++ 模型中
如何有效地将单个对象的多个 C++ 数据成员公开给 QML?
在没有 Q_PROPERTY 定义的情况下从 C++ 访问 QML 对象的属性