我为我的QML + C ++应用程序构建了一个插件系统。插件是QML文件。 qml文件可能如下所示:
项目{ 标题:"性感插件" 版本:" 1.0" }
如何在C ++中阅读标题和版本?
答案 0 :(得分:2)
每个QML项都直接或间接地继承QObject
,因此您可以使用元系统来动态地读取和写入属性"。
QVariant QObject::property(const char * name) const
返回对象的name属性的值。如果没有这样的话 属性存在,返回的变量无效。
如果该项恰好是根项,则可以使用QQuickItem * QQuickView::rootObject() const
来获取它,否则,您必须设置objectName : QString
属性,可用于每个QObject
派生的对象并从根对象调用findChild<QObject*>("name")
。
答案 1 :(得分:1)
最简单的方法是用C ++编写QuickItem。即使它只是一个小组件,它只是拥有标题和版本。然后,它可以在C ++中轻松访问,并且是最简洁的方法,可以解耦视图和逻辑。然后,您可以使用众所周知的Q_PROPERTY宏定义属性。
如果您确实只想使用Qml编写的组件并且不想用C ++编写任何内容,则可以在此页面中找到解决方案:http://qt-project.org/doc/qt-5/qtqml-cppintegration-interactqmlfromcpp.html
引用相关部分来自&#34;从C ++访问QML对象类型的成员&#34;:
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中获取属性要清晰得多。