由于Qt的5.6我们终于可以写出这样的代码:有没有办法如何将QAbstractItemModel的行函数自动公开到QML?
ListView {
id: list
model: MyModel
delegate: TextInput {
text: display
onEditingFinished: {
model.edit = displayText
}
}
即model.edit
将调用MyModel
的setData()
与来自TextInput
Qt::EditRole
和显示值。很好,很久很头痛。
但是,即使使用QAbstractItemModel
为the recommended practice更复杂的基于C++的模型,我仍然觉得它只是只读模型,即qml视图可以读取行数,列数等,但它绝不意味着添加或删除行的方式(为了清洁实现QAbstractItemModel::setData
该行必须已经存在)。
用Q_INVOKABLE重新实现所有插入/删除功能,qml的ListModel
对于任何严重的事情来说都太简单了。
对于基于qml的小部件,应该添加/删除行,编辑项目还有C++模型?
[在QML/QT 5.7中添加和删除C++列表中的项目]的可能重复(https://stackoverflow.com/questions/41617677/adding-and-removing-items-from-ac-list-in- qml-qt-5-7) –
我建议使用通用对象模型,它不绑定到任何特定的数据模式,而且功能非常强大且灵活。通过这种方式,您可以完全避免为每个特定目的模型继续实施C++模型:https://stackoverflow.com/questions/35160909/how-to-create-a-generic-object-model-for-use -in-qml/35161903#35161903 – dtech