我想将水平列表视图作为垂直列表视图的委托。是否可以从 c++ 将不同的模型附加到水平列表视图?
ListView {
id: eventList
model: N (N tells how many horizontal lists are there)
delegate:
ListView {
id: horizontall
model: ?? // How to attach different model from C++ to each horizontal list
orientation: ListView.Horizontal
在 c++ 部分中,我实现了 N 个从 QAbstractlistmodel 派生的 QList 列表
是的,这是可能的。只是不可能制作包含另一个ListModel
的ListModel
。至少在 QML 中是不可能的。
这是如何制作它的快速而肮脏的示例。它能解决你的问题吗?
import QtQuick 2.4
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
ListModel {
id: listModel
ListElement {slmIndex: 0}
ListElement {slmIndex: 1}
ListElement {slmIndex: 2}
ListElement {slmIndex: 3}
ListElement {slmIndex: 4}
ListElement {slmIndex: 5}
}
ListModel {
id: model1
ListElement { name: "1" }
}
ListModel {
id: model2
ListElement { name: "1" }
ListElement { name: "2" }
}
ListModel {
id: model3
ListElement { name: "1" }
ListElement { name: "2" }
ListElement { name: "3" }
}
ListModel {
id: model4
ListElement { name: "1" }
ListElement { name: "2" }
ListElement { name: "3" }
ListElement { name: "4" }
}
ListModel {
id: model5
ListElement { name: "1" }
ListElement { name: "2" }
ListElement { name: "3" }
ListElement { name: "4" }
ListElement { name: "5" }
}
ListModel {
id: model6
ListElement { name: "1" }
ListElement { name: "2" }
ListElement { name: "3" }
ListElement { name: "4" }
ListElement { name: "5" }
ListElement { name: "6" }
}
property var secondLayerModels: [
model1, model2, model3, model4, model5, model6
]
ListView {
anchors.centerIn: parent
width: 200
height: 200
clip: true
model: listModel
orientation: ListView.Vertical
delegate: ListView {
width: 200
height: 50
model: secondLayerModels[slmIndex]
orientation: ListView.Horizontal
delegate: Rectangle {
width: 50
height: 50
border.color: "black"
Text {
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: name
}
}
}
}
}
我不确定这个答案是否完全涵盖了这个问题。它不介绍如何创建将公开另一个模型C++模型。