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

4

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

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个回答

4
一个 ListModel 不像典型的 QML 一样进行解析,而是使用自定义解析器来处理 ListElement 声明。这样可以避免为每个数据元素创建昂贵的对象。通过 QML,ListModel 可以使用许多可用于操作模型数据的功能。你可以在 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"));

1
那么,由于名称冲突,ListModel的“setProperty”本身无法从C++中访问? - mlvljr
1
ListModel 没有公共的 C++ API,因此虽然您可能能够访问该对象的可调用方法,但不建议这样做,因为它们在未来可能会更改。 - MartinJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接