基本上,我想在QML中使用QAbstractItemModel创建树形视图。 我不想使用Qt Quick Control 1 Treeview,因为我想使用一个中等复杂且无法展开的“ Widget”作为代理。 我已经设法获得一个具有2个级别的Listview。我不想手动编码listview的每个子级别,所以我想知道是否存在一种递归方式来显示treemodel中的所有数据。
我的问题是访问组件的正确属性并使它们通用。
这是我到目前为止所得到的:
// LIST VIEW
ListView
{
anchors.fill:
model: treeDelegateModel
}
// FIRST LEVEL DELEGATE
DelegateModel
{
id: treeDelegateModel
model: treeModel
rootIndex: treeModel.index(-1,-1)
delegate: ColumnLayout
{
height: subList.height + treeItem.itemSize + 10
anchors.left: parent.left
anchors.right: parent.right
TreeNode
{
id: treeItem
itemSize: 20
indentationLevel: 0
titleText: model.name
onExpand:
{
isExpanded ? subList.visible = false : subList.visible = true
}
}
ListView
{
id: subList
property int parentIndex: index
visible: true
Layout.fillWidth: true
height: (count * (35 ) + 10)
model: DelegateModel
{
id: subTreeDelegate
property var itemIndex: ListView.currentIndex
model: treeModel
rootIndex: treeModel.index(subList.parentIndex, 0, treeDelegateModel.rootIndex)
delegate: TreeNode
{
indentationLevel: 1
itemSize: 20
titleText: model.name
}
}
onVisibleChanged: { visible ? height = ((count * 35) + 10) : height = 0}
}
}
}
TreeNode只是一个具有文本和按钮的委托。
我希望有一个DelegateModel,我可以递归设置rootIndex,并且只要rootindex有子代,它就应该创建一个列表视图。