所以我在QML中创建了一个嵌套列表:
ListModel {
id: players
ListElement {
name: "Player 1"
counters: [
ListElement {
name: "Life"
count: 20
edit: false
} ,
ListElement {
name: "Poison"
count: 0
edit: false
}
]
}
//etc...
}
而且,我有两个视图可以读取数据:ListView
给出第一级ListModel
,GridView
从counters
读取二级模型。我通过委托中的附加属性给出GridView
counters
列表,如下所示:
GridView {
model: counters
}
最初,它读取数据就好了。但我的问题是,当从代理外部更新第二级模型数据时,GridView
不会使用新数据进行更新。如何更新?
环顾四周时,我看到其他人只是创建了两个单独的模型,但问题是我需要嵌套列表中的信息与包含它的ListElement
相关联,所以这真的不是一个选项。
答案 0 :(得分:1)
事实证明,你必须抓住信号并手动更改属性。它有点蛮力(因为它会在模型中发生任何变化时运行,而不仅仅是代表外部的变化),但它有效。
为此,您必须向视图委托添加Connections
元素以捕获信号。
GridView {
id: view
model: counters
delegate: Item {
property int count: count
Connections {
target: view
onDataChanged: Item.count = count
}
}
}
重要的是Connections
元素是委托的子元素,因为视图会随心所欲地创建/删除委托,因此很难访问由视图创建的委托。