En esta página

TreeViewDelegate QML Type

Un delegado que se puede asignar a un TreeView. Más...

Import Statement: import QtQuick.Controls
Since: Qt 6.3
Inherits:

ItemDelegate

Propiedades

Descripción detallada

Visualización de datos jerárquicos mediante un delegado de vista de árbol

Un TreeViewDelegate es un delegado que puede asignarse al delegate property de un TreeView. Renderiza el árbol, así como las demás columnas, en la vista utilizando el estilo de la aplicación.

TreeView {
    anchors.fill: parent
    delegate: TreeViewDelegate {}
    // The model needs to be a QAbstractItemModel
    // model: yourTreeModel
}

TreeViewDelegate hereda de ItemDelegate, lo que significa que se compone de tres elementos: un background, un contentItem, y un indicator. TreeViewDelegate se encarga de indenting el contentItem y el indicador según su ubicación en el árbol. El indicador sólo será visible si el elemento delegado está dentro del tree column, y renderiza un elemento modelo with children.

Si cambia el indicador, ya no estará sangrado por defecto. En su lugar, tendrá que aplicar la sangría usted mismo configurando el x position del indicador, teniendo en cuenta los depth y indentation. A continuación se muestra un ejemplo de cómo hacerlo:

TreeViewDelegate {
    indicator: Item {
        x: leftMargin + (depth * indentation)
    }
}

La posición del contentItem se controla con padding. Esto significa que puedes cambiar el contentItem sin tener que lidiar con la indentación. Pero también significa que debe evitar cambiar el relleno por otra cosa, ya que eliminará la sangría. El espacio a la izquierda del indicador se controla con leftMargin. El espacio entre el indicador y el contentItem se controla con spacing. Y el espacio a la derecha del contentItem se controla con rightMargin.

Interacción con punteros

TreeViewDelegate hereda ItemDelegate. Esto significa que emitirá señales como clicked cuando el usuario haga clic en el delegado. Si fuera necesario, podrías conectarte a esa señal para implementar una funcionalidad específica de la aplicación, además del comportamiento por defecto de expandir/contraer (e incluso establecer pointerNavigationEnabled a false, para desactivar también el comportamiento por defecto).

Pero la API ItemDelegate no te da información sobre la posición del clic, o qué modificadores se están manteniendo. Si esto es necesario, un mejor enfoque sería utilizar manejadores de puntero, por ejemplo:

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)
            }
        }
    }
}

Nota: Si desea desactivar el comportamiento por defecto que se produce cuando el usuario hace clic en el delegado (como cambiar el índice actual), puede establecer pointerNavigationEnabled a false.

Edición de nodos en el árbol

TreeViewDelegate tiene asignado por defecto edit delegate. Si TreeView tiene configurado edit triggers, y el model tiene soporte para editing model items, entonces el usuario puede activar cualquiera de los activadores de edición para editar el texto del nodo del árbol current.

El delegado de edición por defecto intentará utilizar Qt.EditRole para leer y escribir datos en model. Si QAbstractItemModel::data() devuelve una cadena vacía para este rol, entonces se utilizará Qt.DisplayRole en su lugar.

Siempre puedes asignar tu propio delegado de edición personalizado a TableView.editDelegate si tienes necesidades fuera de lo que ofrece el delegado de edición por defecto.

Véase también TreeView.

Documentación de propiedades

current : bool

Esta propiedad es válida si el delegado representa a current index en selection model.

depth : int

Esta propiedad contiene la profundidad del elemento del modelo dibujado por el delegado. La profundidad de un elemento del modelo es la misma que el número de ancestros que tiene en el modelo.

editing : bool [since 6.5]

Esta propiedad mantiene si el delegado está siendo edited.

Esta propiedad se introdujo en Qt 6.5.

expanded : bool

Esta propiedad es true si el elemento del modelo dibujado por el delegado se expande en la vista.

hasChildren : bool

Esta propiedad es true si el elemento del modelo dibujado por el delegado tiene hijos en el modelo.

indentation : real

Esta propiedad indica el espacio que ocupa un hijo en la sangría horizontal respecto a su padre.

isTreeNode : bool

Esta propiedad es true si el elemento delegado dibuja un nodo en el árbol. Sólo se utilizará una columna de la vista para dibujar el árbol y, por lo tanto, sólo los elementos delegados de esa columna tendrán esta propiedad establecida a true.

Un nodo en el árbol es indented según su depth, y muestra un indicator si hasChildren es true. Los elementos delegados en otras columnas tendrán esta propiedad establecida en false.

leftMargin : real

Esta propiedad contiene el espacio entre el borde izquierdo de la vista y el borde izquierdo del indicador (además de la sangría). Si no hay indicador visible, el espacio estará entre el borde izquierdo de la vista y el borde izquierdo del contentItem.

Véase también rightMargin, indentation, y spacing.

rightMargin : real

Esta propiedad mantiene el espacio entre el borde derecho de la vista y el borde derecho del contentItem.

Véase también leftMargin, indentation, y spacing.

selected : bool

Esta propiedad se mantiene si el delegado representa un selected index en el selection model.

treeView : TreeView

Esta propiedad apunta al TreeView que contiene el elemento delegado.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.