【问题标题】:Delegate reading from QML nested list not updating委托从 QML 嵌套列表读取不更新
【发布时间】:2014-07-22 11:19:31
【问题描述】:

所以我在 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 相关联,所以这真的不是一个选项.

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    事实证明,您必须手动捕获信号并更改属性。这有点蛮力(因为它会在模型​​发生任何变化的情况下运行,而不仅仅是来自委托外部的变化),但它可以工作。

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 2019-09-25
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多