我尝试访问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");
但我无法访问此属性。 请帮忙。
答案 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"));