1

我正在为我的 QML+C++ 应用程序构建一个插件系统。插件是 QML 文件。一个 qml 文件可能如下所示:

项目{标题:“性感插件”版本:“1.0”}

如何在 C++ 中读取标题和版本?

4

2 回答 2

2

每个 QML 项目都QObject直接或间接继承,因此您可以使用元系统“动态”读取和写入属性。

QVariant QObject::property(const char * name) const  

返回对象名称属性的值。如果不存在此类属性,则返回的变体无效。

如果该项目恰好是根项目,您可以使用QQuickItem * QQuickView::rootObject() const它来获取它,如果不是,则必须设置该objectName : QString属性,该属性可用于每个QObject派生对象并findChild<QObject*>("name")从根对象调用。

于 2014-11-08T14:33:57.770 回答
1

最简单的方法是用 C++ 编写一个 QuickItem。即使它只是一个小组件,它也只包含标题和版本。然后它可以在 C++ 中轻松访问,它是分离视图和逻辑的最简洁方式。然后您可以使用众所周知的 Q_PROPERTY 宏定义属性。

如果您实际上只想使用 Qml 编写的组件并且不想用 C++ 编写任何内容,则此页面中提到了一个解决方案:http: //qt-project.org/doc/qt-5/qtqml-cppintegration -interactqmlfromcpp.html

引用“从 C++ 访问 QML 对象类型的成员”的相关部分:

QQmlEngine engine;
QQmlComponent component(&engine, "MyItem.qml");
QObject *object = component.create();

qDebug() << "Property value:" << QQmlProperty::read(object, "someNumber").toInt();
QQmlProperty::write(object, "someNumber", 5000);

qDebug() << "Property value:" << object->property("someNumber").toInt();
object->setProperty("someNumber", 100);

所以 QQmlProperty 可能会帮助你。

我不知道你的目标是什么,我不会推荐任何东西。无论如何,在我看来,在许多情况下,用 C++ 编写 Item 的第一种方法比尝试从 Qml 获取属性要干净得多。

于 2014-11-08T13:29:45.077 回答