Listview QML列表列表(二维数据)

Listview QML列表列表(二维数据),listview,qml,qtquick2,Listview,Qml,Qtquick2,小结:如何将一个ListView嵌套在另一个ListView中,将数据从外部模型传递到委托内部的内部模型 数据与欲望 我在JS中有一个数据数组: [{t:0,标签:大爆炸,{t:5,标签:地球形态}], [{t:0,label:Alternate Bang},{t:3,label:Cool Stuff}], [{t:1,label:latebang},{t:4,label:Whee},{t:5,label:More}] 我想将其显示为一个水平滚动的时间轴,其中顶级数组表示数据行,每个子数组表示该

小结:如何将一个ListView嵌套在另一个ListView中,将数据从外部模型传递到委托内部的内部模型

数据与欲望 我在JS中有一个数据数组:

[{t:0,标签:大爆炸,{t:5,标签:地球形态}], [{t:0,label:Alternate Bang},{t:3,label:Cool Stuff}], [{t:1,label:latebang},{t:4,label:Whee},{t:5,label:More}] 我想将其显示为一个水平滚动的时间轴,其中顶级数组表示数据行,每个子数组表示该行中的项目,在不同的时间放置

请注意,时间线仅在毫秒级别离散,值在小时范围内。与此基于Excel的模型显示的不同,合并单元的二维网格是不可行的

代码与问题 我通过自定义ListModel将数组传递给ListView:

项目{ 属性变量时间线:[] onTimelineChanged:{ rowData.clear; timeline.forEachfunctionevts{ 追加{events:evts}; }; } 列表视图{ id:行 模型:ListModel{id:rowData} 代表:议程项目{ Text{Text:Idx+index} 列表视图{ 方向:ListView.Horizontal 模型:ListModel{id:events} 代表:… } } } } 这是正确地填充行,但我不知道如何将事件数据角色从外部ListView传递到每个委托内的事件模型中

此外,当我写下这个问题时,我意识到每一行可能会尝试彼此独立地水平滚动。我想让他们都作为一个群体滚动。这让我想知道嵌套的ListView是否适合此工作,或者是否应该使用其他数据驱动的QML结构

您只需将事件分配给内部ListView.model,例如:

ListView {
    anchors.fill: parent
    model: ListModel { id:rowData }
    delegate: Rectangle {
        width: parent.width; height: 50
        ListView {
            anchors.fill: parent; orientation: ListView.Horizontal
            model: events
            delegate: Item {
                width: 80; height: 20
                Text { text: label }
            }
        }
    }
}
当JavaScript数组附加到ListModel行时,它将自动转换为ListModel,但是Qt文档对此没有任何说明。因此,当您在外部ListView中访问委托中的role name事件时,您会得到如下结果:

ListModel { //row 0
    id: events
    ListElement {t:0, label:"Big Bang"}
    ListElement {t:5, label:"Earth Forms"}
}

我认为通过将contentX或positionViewAtIndex设置为所有内部ListView,可以同时水平滚动所有内部ListView。

BTW,我知道我应该为我的数据创建一个真实的模型,而不是每次数据更改时都通过JavaScript。对此,我有自己的理由,也许是因为我头脑发昏。那个用数组来建模的东西既奇怪又奇妙,这正是我所需要的。谢谢@mcchu它不是真的自动转换成ListModel,它可以作为一个模型使用。ListModel是ListView和朋友可以使用的许多模型类型之一。