ListView列中的ListView列,或QML对列表列表的处理

时间:2016-11-05 04:09:33

标签: qt listview qml qtquick2

我有一个包含项目列表的XML响应。每个项目包含另一个子项目列表。我能够成功地将其转换为QML中的模型,但是我在排除列表列表方面遇到了问题。

我想将项目列表呈现为Row s,每个项目都有自己的标题;以及将Column水平附加到其对应的Row的子项列表。从使用ListView的每个组件的QML文档看起来这应该很容易,但我遇到了两个问题:

  • 子项Column重叠在Column
  • 的“标题”Row
  • 仅显示第一个子项目,其余部分将被忽略

这是相对最小的QML(可以与qmlscene一起运行)来重现:

import QtQuick 2.5

ListView {
    width: 640
    height: 480

    model: ListModel {
        ListElement { title: "title 1" }
        ListElement { title: "title 2" }
    }

    delegate: Row {
        width: parent.width
        Text {
            text: title
            elide: Text.ElideRight
        }
        ListView {
            orientation: ListView.Horizontal
            model: ListModel {
                ListElement { name: "name 1"; description: "desc 1" }
                ListElement { name: "name 2"; description: "desc 2" }
            }
            delegate: Column {
                Text { text: "name: " + name + "; desc: " + description }
            }
        }
    }
}

预期输出为:

title 1 name: name 1; desc: desc1 name: name 2; desc: desc 2
title 2 name: name 1; desc: desc1 name: name 2; desc: desc 2

我是否在错误的地方使用ListView?或者我应该使用其他组件来达到预期效果吗?

1 个答案:

答案 0 :(得分:1)

您可能并不想使用嵌套的垂直列表视图?这将是次优的可用性。

import QtQuick 2.5

ListView {
    width: 640
    height: 480

    model: ListModel {
        ListElement { title: "title 1" }
        ListElement { title: "title 2" }
    }

    delegate: Row {
        width: parent.width
        Text {
            text: title
            width: 100
            elide: Text.ElideRight
        }
        Column {
            Repeater {
                model: ListModel {
                    ListElement { name: "name 1"; description: "desc 1" }
                    ListElement { name: "name 2"; description: "desc 2" }
                }
                delegate: Column {
                    Text { text: "name: " + name + "; desc: " + description }
                }
            }
        }
    }
}