c++ - 从 C++ 访问 ListElement (QML) 颜色

标签 c++ properties qml

我尝试访问 ListElement (QML):color 的属性;

ListModel {
    id:myListModel
    ListElement {name:"one" ;color:"red";objectName:"first"}
    ListElement(name:"two";color:"green"}
}

在 C++ 中我必须使用:

QObject* o=ui->declarativeView->rootObject()->findChild<QObject*>("first");
  o->setProperty("color","blue");

但我无法访问此属性。 请帮忙。

最佳答案

ListModel 不作为典型的 QML 进行解析,而是使用自定义解析器来处理 ListElement 声明。这允许模型避免为每个数据元素创建昂贵的对象。 ListModel 有许多函数可用于通过 QML 操作模型数据。您可以将自己的函数添加到 QML 中的模型中,您可以从 C++ 访问这些函数,例如

ListModel {
    id:myListModel
    objectName: "model"
    function setColor(index, color) {
        myListModel.setProperty(index, "color", color)
    }
    ListElement {name:"one";color:"red"}
    ListElement {name:"two";color:"green"}
}

在 C++ 中:

QObject* o=ui->declarativeView->rootObject()->findChild<QObject*>("model");
QMetaObject::invokeMethod(o, "setColor", Q_ARG(QVariant, 0), Q_ARG(QVariant, "yellow"));

关于c++ - 从 C++ 访问 ListElement (QML) 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12786803/

相关文章:

c++ - mingw 的 C++ 异常的奇怪问题

C++如何从文件中读取以进行计数控制循环?

c# - 我如何在Unity中序列化c#的属性

c# - 防止继承成员访问 protected 成员

android - 如何在 Android 和桌面与 Qt 中使用相机

qt - 在 OS X 上使用 LocalStorage (Sqlite) 部署 Qt/QML App

c++ - 运行时错误 :SIG SEGV

c++ - SDL 2.0 - 无效的渲染器错误

java - 在 glassfish/tomcat/etc 中管理 .properties 文件的优雅解决方案

c++ - 如何使我的 OpenGL 视频具有与 QQuickItem 相同的大小和位置?