委托从QML嵌套列表中读取不更新

时间:2014-07-17 02:41:06

标签: qt qml

所以我在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给出第一级ListModelGridViewcounters读取二级模型。我通过委托中的附加属性给出GridView counters列表,如下所示:

GridView {
    model: counters
}

最初,它读取数据就好了。但我的问题是,当从代理外部更新第二级模型数据时,GridView不会使用新数据进行更新。如何更新?

环顾四周时,我看到其他人只是创建了两个单独的模型,但问题是我需要嵌套列表中的信息与包含它的ListElement相关联,所以这真的不是一个选项。

1 个答案:

答案 0 :(得分:1)

事实证明,你必须抓住信号并手动更改属性。它有点蛮力(因为它会在模型​​中发生任何变化时运行,而不仅仅是代表外部的变化),但它有效。

为此,您必须向视图委托添加Connections元素以捕获信号。

GridView {
    id: view
    model: counters
    delegate: Item {
        property int count: count
        Connections {
            target: view
            onDataChanged: Item.count = count
        }
    }
}

重要的是Connections元素是委托的子元素,因为视图会随心所欲地创建/删除委托,因此很难访问由视图创建的委托。