按这里的说明https://doc.qt.io/qt-5/qtqml-cppintegration-data.html#qvariantlist-and-qvariantmap-to-javascript-array-and-object,正常应该传QVariantMap就行了。我试了下不行,提示是这个:
- QMetaObject::invokeMethod: No such method QQmlListModel_QML_6::append(QVariant)
- Candidates are:
- append(QQmlV4Function*)
也就是这里的append函数参数不是个js的object,所以得换下了。例如ListModel你需要的是两个字段,name和desc,就这样改下qml:
- ListModel {
- id: listModel
- function appendItem(item) {
- append({name: item.name, desc: item.desc});
- }
- }
这样,调用appendItem来实现插入就可以了。
- QVariantMap map;
- map.insert("name", "Element 1");
- map.insert("desc", "Desc 1");
- QMetaObject::invokeMethod(model, "appendItem", Q_ARG(QVariant, QVariant::fromValue(map)));
这种用个js函数封装一下的方式可以。或者你可以完全不用ListModel,直接model全用C++实现,直接继承QAbstractListModel,在C++里面实现所有的操作,然后把这个model赋值给ListView的model。