我正在为我的 QML+C++ 应用程序构建一个插件系统。插件是 QML 文件。一个 qml 文件可能如下所示:
项目{标题:“性感插件”版本:“1.0”}
如何在 C++ 中读取标题和版本?
每个 QML 项目都QObject
直接或间接继承,因此您可以使用元系统“动态”读取和写入属性。
QVariant QObject::property(const char * name) const
返回对象名称属性的值。如果不存在此类属性,则返回的变体无效。
如果该项目恰好是根项目,您可以使用QQuickItem * QQuickView::rootObject() const
它来获取它,如果不是,则必须设置该objectName : QString
属性,该属性可用于每个QObject
派生对象并findChild<QObject*>("name")
从根对象调用。
最简单的方法是用 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 获取属性要干净得多。