是的,它是可能的。制作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++模型。
嵌套'ListModel's可以通过'attributes',参见[这里](http://stackoverflow.com/a/34358794/2538363)和相关链接。这就是说,在我看来,嵌套模型是一种不必要的复杂性增加。我会注册C++模型,然后用'Flickable' +'Repeater'在自定义视图中使用它们。在更动态的设置中,例如如果C++模型的数量可以大幅度变化,那么最好有一个独特的类来暴露模型的数量并授予对它们的访问权限。只是我的两分钱。 – BaCaRoZzo
@Filip嗨,问题是我不知道我会有多少模型 - 这取决于C++中的一些数据。 我知道可以将ListElement添加到ListModel,但我无法找到合适的方式来创建N个ListModels,然后向每个模型添加元素。在例子中,你使用属性var secondLayerModels硬编码了6个模型。 BaCaRoZzo:我已经尝试使用ListView内部转发器,它也适用于模型数组,并获取每个模型由于索引。你知道我问菲利普什么吗?这似乎是一个简单的问题,但我无法达成解决方案。 – iTwo