0

将 ListModel 用于中继器时,如果未在模型的第一个元素中设置属性,则不会在以下元素中考虑该属性。为什么?


import QtQuick 2.7
import QtQuick.Controls 2.3

Item{
    id: root
    property var labels: ListModel{}
    Button{
        text: 'create labels'
        onClicked:{
            root.labels.append({})
            root.labels.append({name: '2'})
            root.labels.append({name: '3'})
        }
    }
    Column{
        x: 10
        y: 200
        spacing: 2
        Repeater{
            model:  root.labels
            Button{
                width: 120
                height: 30
                text: model.name
            }
        }
    }
}

这段代码没问题:

....
        onClicked:{
            root.labels.append({name: '1'})
            root.labels.append({})
            root.labels.append({name: '3'})
        }
 ....


4

1 回答 1

0

它不起作用,因为 ListModel 的角色是根据其第一个元素进行评估的。第一个元素的属性定义了模型的角色。如果您在以下元素中有其他属性,这些将被忽略。

dynamicRoles当属性未设置为时,该行为是默认行为true。当设置为true时,模型将为每个插入的元素重新计算其角色,并在modelReset每次角色更改时发出一个。这是昂贵的并且通常不需要,因此默认情况下它被禁用。

于 2021-07-12T08:18:10.307 回答