【问题标题】:How to access nested Repeaters in QML?如何访问 QML 中的嵌套中继器?
【发布时间】:2019-04-16 22:05:48
【问题描述】:

我想动态地填充通过Repeaters创建的以下矩形中的颜色。

我根本无法访问底部的中继器。

我应该如何访问这里的“所有”矩形?

        Row
        {
            spacing: 20
            Repeater
            {
                id: repeater3

                property Repeater repeater2: repeater2

                model: head.rows
                Column
                {
                    id: columnInBetween
                    spacing: 20
                    Repeater
                    {
                        id: repeater2
                        model: head.columns
                        property Row row1: row1
                        Row
                        {
                            id: row1
                            property Repeater repeater1: repeater1
                            Repeater
                            {
                                id: repeater1
                                model: 2
                                Rectangle
                                {
                                    width: 20; height: 20
                                    color: "red" 
                                }
                            }
                        }
                    }
                }
            }
        }

【问题讨论】:

  • I am not able to access the bottom Repeater at all - 为什么不呢?你尝试了什么?
  • 如果您需要访问由中继器创建的项目,您可以遍历其父级的children 属性(记住,中继器的父级将其创建给它自己的父级——在它自己之后!)或“注册”在文件范围内具有可见 id 的项目的属性中感兴趣的项目;
  • ...如果您正在寻找访问外部中继器的每个项目模型数据的方法,也有一些方法(即“别名”它像 property var modelData2: modelData 一样 - 提供名称Repeater 附加的属性是modelData -- 现在不记得了,可以是普通的model,这些东西在Repeater 和ListView 之间有点不一致,iirc)。

标签: qt qml qtquick2


【解决方案1】:

Repeater 将扩展 Item 他们 contians。所以你可以使用 .children[index] 访问那些 Item 扩展。 在你的情况下:

/*0< index < head.rows
you get first Column expanded by repeater3*/
repeater3.itemAt(index).children[0]

/*0< index < head.columns
you get first Row of first Column expanded by repeater3 and repeater2*/
repeater3.itemAt(index).children[0].children[0]

/*0< index < 2
you get first Rectangle of first Row of first Column expanded by repeater3 and repeater2 and repeater1*/
repeater3.itemAt(index).children[0].children[0].children[0]

顺便说一句,我不知道您的意图,只是提醒您获得 head.columns 行和 2 * head.rows 列表格。

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 2023-03-07
    • 2014-01-15
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多