我有一个QML ListView
,我通过JavaScript数组驱动代理数据:
ListView {
id:mylist
model: [ {...}, {...}, {...} ] // JS objects
delegate: MyRow { mydata: mylist.model[index] }
}
以上代码正常运行。我最初编写的代码没有按预期工作,但是:
ListView {
model: [ {...}, {...}, {...} ] // JS objects
delegate: MyRow { mydata: model[index] }
}
MyRow.qml
只是一个带有自定义属性和一些布局子项的Rectangle:
Rectangle {
property var mydata
color:'#eeeeff'; height:20
RowLayout {
anchors.fill:parent
Text { ... }
Text { ... }
}
}
当我在model
代表内部要求MyRow
时,我得到了什么?它不是index
可以访问的数组,也不是具有我想要的属性的对象。
修改:如果我将model+""
分配给我的委托中的字符串属性,我会获得QQmlDMListAccessorData(0x13aee00)
。
答案 0 :(得分:2)
引用Models and Views in Qt Quick:
如果模型的属性与委托的属性之间存在命名冲突,则可以使用限定的模型名称来访问角色。例如,如果文本类型具有类型或年龄属性,则上例中的文本将显示这些属性值而不是类型和模型项中的 age 值。在这种情况下,属性可能已被引用为
model.type
和model.age
,以确保委托显示模型项中的属性值。
因此,model
是命名模型角色的访问者。如果您没有任何命名角色,例如,如果模型是数字或JS数组,Qt就无法创建名称;相反,您通过modelData
提供了数据。换句话说,当您的模型没有命名角色时,model
没用。