QML中继器可用于多个项目而无需包装项目

But*_*ink 3 qt qml

我想制作一个看起来像这样的视图(为简洁起见,我在此不再赘述)

 __________
| text     |
|__________|
|    |headr|
|____|_____|
|text|item1|
|    |item2|
|    |     |
|text|item3|
|    |item4|
|    |item5|
|    |item6|
|____|_____|
Run Code Online (Sandbox Code Playgroud)

并一直尝试使用GridLayout做到这一点。问题是我可能有很多行。这仅取决于我的模型。因此,我希望能够有一个重复相同n个元素的转发器。但是,它似乎只包含一个组成部分。我想重复一个元素,但这不是GridLayout找出间距的方式。因此,除了使用动态对象创建外,这似乎是不可能的。

我试图重复的实际项目的代码是这样的

            Text {
                Layout.alignment: Qt.AlignHCenter
                text: abbr
                color: "#545454"
            }
            VerticalRule {
                Layout.fillHeight: true
            }
            ColumnLayout {
                Repeater {
                    model: getModel()
                    Image {}
                }
            }
            VerticalRule {
                Layout.fillHeight: true
            }
            ColumnLayout {
                Repeater {
                    model: getModel()
                    Image {}
                }
            }
Run Code Online (Sandbox Code Playgroud)

因此,有什么方法可以轻松地在qml中做到这一点,或者当我涉及这种超级特定的表格格式时,我是自己一种。

pix*_*ase 5

可以使用GridLayout来完成;使用多个中继器,每个用于Gridlayout中的列。以下代码段复制了您的文本布局:

GridLayout {
    columns: 2

    Text {
        Layout.columnSpan: 2
        Layout.alignment: Qt.AlignHCenter
        text: 'text'
    }
    Text {
        Layout.column: 1
        Layout.row: 1
        text: 'header'
    }
    Repeater {
        model: list

        Text {
            Layout.column: 0
            Layout.row: index + 2
            Layout.alignment: Qt.AlignTop
            text: label
        }
    }
    Repeater {
        model: list

        Column {
            Layout.column: 1
            Layout.row: index + 2

            Repeater {
                model: items

                Text { text: item }
            }
        }
    }
    ListModel {
        id: list

        ListElement {
            label: 'text1'
            items: [
                ListElement { item: 'item1' },
                ListElement { item: 'item2' }
            ]
        }
        ListElement {
            label: 'text2'
            items: [
                ListElement { item: 'item3' },
                ListElement { item: 'item4' },
                ListElement { item: 'item5' },
                ListElement { item: 'item6' },
                ListElement { item: 'item7' }
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)