4

我尝试访问 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");

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

4

1 回答 1

4

AListModel不被解析为典型的 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"));
于 2012-10-09T01:59:19.880 回答