QML递归将Listview嵌套为Treeview

时间:2019-07-15 11:26:55

标签: qt listview qml

基本上,我想在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有子代,它就应该创建一个列表视图。

0 个答案:

没有答案