Qt 用于不带包装项目的多个项目的QML中继器

Qt 用于不带包装项目的多个项目的QML中继器,qt,qml,Qt,Qml,我想创建一个类似的视图(为了简洁起见,我省略了一列) 一直在尝试用网格布局来实现这一点。问题是我可能有很多行。这取决于我的型号。所以,我希望能够有一个中继器,它将重复相同的n个元素。然而,它似乎只包含一个组件。我想重复一个元素,但这不是GridLayout计算间距的方式。所以,这似乎是不可能的,除非使用动态对象创建 我试图重复的实际项目的代码如下 Text { Layout.alignment: Qt.AlignHCenter

我想创建一个类似的视图(为了简洁起见,我省略了一列)

一直在尝试用网格布局来实现这一点。问题是我可能有很多行。这取决于我的型号。所以,我希望能够有一个中继器,它将重复相同的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 {}
                }
            }

那么,在qml中有什么方法可以轻松做到这一点呢?或者说,当涉及到这种超特定的表格式时,我是不是有点依靠自己。

除非我找到一种方法,否则你不能。您可以使用ListView使行本身具有GridView。。。。我想。

你可以用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' }
            ]
        }
    }
}
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' }
            ]
        }
    }
}