QML TreeView: как убрать дефолтные кнопки сворачивания

Есть рабочий TreeView, сворачивается, разворачивается, показывает все верно. Вопрос по кастомизации внешнего вида. Дефолтный TreeView добавляет к элементам, у которых есть дочерние, треугольные кнопки (свернуть/развернуть). Как их заменить на свои иконки? Что пробовал:

TableViewColumn {
 width: 100

 delegate: Image {
     fillMode: Image.PreserveAspectFit
     source: sourceFunc()

     function sourceFunc() {
         if (!treeView.isExpanded( styleData.index )) {
             return "qrc:/img/images/icon_opened.svg"
         } else {
             return "qrc:/img/images/icon_closed.svg"
         }
     }
 }
}

Иконки рисуются (правда только закрытая, почему-то), но и дефолтная треугольная кнопка тоже. Подскажите пожалуйста, куда воевать, я совершенно без понятия.

И прошу еще пояснить как правильно использовать rowDelegate и itemDelegate у TreeView. Спасибо


Ответы (1 шт):

Автор решения: OGF

Разобрался, изучив как следует исходники TreeView. Треугольная кнопка оказалась вовсе и не кнопкой, а символом юникода. Чтобы назначить собственную иконку, нужно в TreeView определить свойство style, внутри которого определить свой branchDelegate:

style: TreeViewStyle {
  branchDelegate: Item {
    width: indentation
    height: 16
    Image {
      id: icon
      visible: styleData.column === 0 && styleData.hasChildren
      source: styleData.isExpanded ? "qrc:/img/images/folder_opened.svg"
                                   : "qrc:/img/images/folder_closed.svg"
      anchors.centerIn: parent
      anchors.verticalCenterOffset: 2
    }
  }
}
→ Ссылка