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

时间:2012-10-08 17:44:41

标签: 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");

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

1 个答案:

答案 0 :(得分:4)

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"));