TreeViewDelegate QML类型

可用于分配给TreeView的委托。 更多...

导入声明import QtQuick.Controls
Qt 6.3
继承

ItemDelegate

属性

详细介绍

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

属性文档

current : bool

此属性指示代理是否表示当前索引选择模型中。


depth : int

此属性表示由代理绘制的模型项的深度。模型项的深度与它在模型中的祖先数量相同。


editing : bool [since 6.5]

此属性指示代理是否正在编辑

此属性自 Qt 6.5 开始引入。


expanded : bool

如果代理绘制的模型项在视图中展开,则此属性为代码 true


hasChildren : bool

此属性为 true,如果委托所绘制的模型项在模型中有子项。


缩进 : real

此属性表示子项相对于其父项水平缩进的距离。


isTreeNode : bool

此属性为 true,如果委托项在树中绘制了节点。视图中只有一个列用于绘制树,因此,只有该列的委托项才会设置此属性为 true

树的节点根据其 深度 来缩进,并且如果 hasChildrentrue,则显示一个 指示器。其他列中的委托项将此属性设置为 false


leftMargin : real

此属性表示视图的左边缘和指示器左边缘(除缩进外)之间的空间。如果没有可见的指示器,则空间将位于视图左边缘和内容项左边缘之间。

另请参阅rightMarginindentationspacing


rightMargin : real

此属性表示视图的右边缘和内容项右边缘之间的空间。

另请参阅leftMarginindentationspacing


selected : bool

此属性表示委托是否代表在 选择模型 中的 选中索引


treeView : TreeView

此属性指向包含委托项的 TreeView


© 2024 Qt公司有限公司。本文件中包含的文档贡献者的版权。提供的文档依据由自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款获得许可。Qt及其相关标志是芬兰和/或其他国家的Qt公司商标。所有其他商标均为其各自所有者的财产。