我在ListView委托中获得了什么样的“模型”?

时间:2016-08-22 16:23:30

标签: qt qml qtquick2

我有一个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)

1 个答案:

答案 0 :(得分:2)

引用Models and Views in Qt Quick

  

如果模型的属性与委托的属性之间存在命名冲突,则可以使用限定的模型名称来访问角色。例如,如果文本类型具有类型年龄属性,则上例中的文本将显示这些属性值而不是类型和模型项中的 age 值。在这种情况下,属性可能已被引用为model.typemodel.age,以确保委托显示模型项中的属性值。

因此,model是命名模型角色的访问者。如果您没有任何命名角色,例如,如果模型是数字或JS数组,Qt就无法创建名称;相反,您通过modelData提供了数据。换句话说,当您的模型没有命名角色时,model没用。