TreeViewDelegate QML类型
导入声明 | import QtQuick.Controls |
自 | Qt 6.3 |
继承 |
属性
- 当前 : bool
- 深度 : int
- 编辑 : bool
(自 6.5)
- 展开 : bool
- 有子项 : bool
- 缩进 : real
- 是树节点 : bool
- 左边距 : real
- 右边距 : real
- 已选择 : bool
- TreeView : TreeView
详细介绍
TreeViewDelegate是可用于分配给TreeView的delegate属性的委托。它使用应用程序样式渲染树以及其他列。
TreeView { anchors.fill: parent delegate: TreeViewDelegate {} // The model needs to be a QAbstractItemModel // model: yourTreeModel }
TreeViewDelegate继承自ItemDelegate,这意味着它由三个元素组成:一个背景,一个内容项,以及一个指示器。TreeViewDelegate会根据内容项和指示器在树中的位置进行缩进处理。只有当委托项位于树列内时,指示器才会可见,并渲染具有子项的模型项。
如果您更改了指示器,它将不会默认缩进。取而代之,您需要自己通过设置指示器的x位置来实现缩进,并考虑深度和缩进。以下是一个示例:
TreeViewDelegate { indicator: Item { x: leftMargin + (depth * indentation) } }
内容项的位置由填充控制。这意味着您可以在不处理缩进的情况下更改内容项。但这也意味着您应避免将填充更改为其他值,因为这将移除缩进。指示符左侧的空间由leftMargin控制。指示符和内容项之间的空间由spacing控制。而内容项右侧的空间由rightMargin控制。
与指针交互
TreeViewDelegate 继承了ItemDelegate。这意味着当用户点击代理时,它将发出信号,例如clicked。如有需要,您可以连接到此信号以实现特定于应用程序的功能,包括默认的展开/折叠行为(甚至可以将pointerNavigationEnabled设置为false
,以禁用默认行为)。
但ItemDelegate API 并不提供有关点击位置或哪些修饰符正在按下的信息。如果需要这些信息,则更好的方法是将指针处理器,例如
TreeView { id: treeView delegate: TreeViewDelegate { TapHandler { acceptedButtons: Qt.RightButton onTapped: someContextMenu.open() } TapHandler { acceptedModifiers: Qt.ControlModifier onTapped: { if (treeView.isExpanded(row)) treeView.collapseRecursively(row) else treeView.expandRecursively(row) } } } }
注意:如果您想禁用在用户点击代理时发生的默认行为(例如更改当前索引),可以将pointerNavigationEnabled设置为false
。
在树中编辑节点
TreeViewDelegate 默认分配有一个编辑代理。如果TreeView设置了编辑触发器,并且模型支持编辑模型项,则用户可以激活任意一个编辑触发器来编辑当前树节点的文本。
默认编辑代理将尝试使用Qt.EditRole
来读取和写入模型中的数据。如果QAbstractItemModel::data()为此角色返回一个空字符串,则将使用Qt.DisplayRole
代替。
如果您对默认编辑代理提供的内容有超出需求,可以为TableView.editDelegate分配自己的自定义编辑代理。
另请参阅:TreeView。
属性文档
depth : int |
此属性表示由代理绘制的模型项的深度。模型项的深度与它在模型中的祖先数量相同。
expanded : bool |
如果代理绘制的模型项在视图中展开,则此属性为代码 true
。
hasChildren : bool |
此属性为 true
,如果委托所绘制的模型项在模型中有子项。
缩进 : real |
此属性表示子项相对于其父项水平缩进的距离。
isTreeNode : bool |
此属性为 true
,如果委托项在树中绘制了节点。视图中只有一个列用于绘制树,因此,只有该列的委托项才会设置此属性为 true
。
树的节点根据其 深度
来缩进,并且如果 hasChildren 是 true
,则显示一个 指示器。其他列中的委托项将此属性设置为 false
。
leftMargin : real |
此属性表示视图的左边缘和指示器左边缘(除缩进外)之间的空间。如果没有可见的指示器,则空间将位于视图左边缘和内容项左边缘之间。
另请参阅rightMargin、indentation 和 spacing。
rightMargin : real |
此属性表示视图的右边缘和内容项右边缘之间的空间。
另请参阅leftMargin、indentation 和 spacing。
© 2024 Qt公司有限公司。本文件中包含的文档贡献者的版权。提供的文档依据由自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款获得许可。Qt及其相关标志是芬兰和/或其他国家的Qt公司商标。所有其他商标均为其各自所有者的财产。