DelegateModel QML Type
Encapsula un modelo y un delegado. Más...
| Import Statement: | import QtQml.Models |
Propiedades
- count : int
- delegate : Component
- delegateModelAccess : enumeration
(since 6.10) - filterOnGroup : string
- groups : list<DelegateModelGroup>
- items : DelegateModelGroup
- model : model
- parts : object
- persistedItems : DelegateModelGroup
- rootIndex : QModelIndex
Propiedades anexas
- groups : list<string>
- inItems : bool
- inPersistedItems : bool
- isUnresolved : bool
- itemsIndex : int
- model : model
- persistedItemsIndex : int
Métodos
- QModelIndex modelIndex(int index)
- QModelIndex parentModelIndex()
Descripción detallada
El tipo DelegateModel encapsula un modelo y el delegado que se instanciará para los elementos del modelo.
Normalmente no es necesario crear un DelegateModel. Sin embargo, puede ser útil para manipular y acceder a modelIndex cuando se utiliza una subclase de QAbstractItemModel como modelo. Además, DelegateModel se utiliza junto con Package para proporcionar delegados a múltiples vistas, y con DelegateModelGroup para ordenar y filtrar elementos delegados.
DelegateModel sólo admite modelos unidimensionales: si se asigna un modelo de tabla a DelegateModel y éste a TableView, sólo se mostrará una columna.
El ejemplo siguiente ilustra el uso de un DelegateModel con un ListView.
import QtQuick import QtQml.Models Rectangle { width: 200; height: 100 DelegateModel { id: visualModel model: ListModel { ListElement { name: "Apple" } ListElement { name: "Orange" } } delegate: Rectangle { height: 25 width: 100 Text { text: "Name: " + name} } } ListView { anchors.fill: parent model: visualModel } }
Documentación de propiedades
count : int
delegate : Component
El delegado proporciona una plantilla que define cada elemento instanciado por una vista. El índice se expone como una propiedad accesible index. Las propiedades del modelo también están disponibles dependiendo del tipo de Modelo de Datos.
delegateModelAccess : enumeration [since 6.10]
Esta propiedad determina cómo los delegados pueden acceder al modelo.
| Constante | Descripción |
|---|---|
DelegateModel.ReadOnly | Prohíbe a los delegados escribir el modelo a través de las propiedades de contexto, el objeto model o las propiedades requeridas. |
DelegateModel.ReadWrite | Permite a los delegados escribir el modelo a través de las propiedades de contexto, el objeto model o las propiedades requeridas. |
DelegateModel.Qt5ReadWrite | Permitir a los delegados escribir el modelo a través del objeto model y las propiedades de contexto, pero no a través de las propiedades requeridas. |
El valor por defecto es DelegateModel.Qt5ReadWrite.
Esta propiedad se introdujo en Qt 6.10.
Ver también Modelos y Vistas en Qt Quick#CambiandoDatos del Modelo.
filterOnGroup : string
Esta propiedad contiene el nombre del grupo que se utiliza para filtrar el modelo de delegado.
Sólo los elementos que pertenecen a este grupo son visibles para una vista.
Por defecto es el grupo items.
groups : list<DelegateModelGroup>
Esta propiedad contiene las definiciones de grupo de un modelo de delegado.
Los grupos definen un subconjunto de los elementos de un modelo de delegado y pueden utilizarse para filtrar un modelo.
Por cada grupo definido en DelegateModel se añaden dos pseudopropiedades adjuntas a cada elemento delegado. La primera, del tipo DelegateModel.inGroupName, indica si el elemento pertenece al grupo y la segunda, DelegateModel.groupNameIndex, contiene el índice del elemento en ese grupo.
El siguiente ejemplo ilustra el uso de grupos para seleccionar elementos en un modelo.
import QtQuick import QtQml.Models Rectangle { width: 200; height: 100 DelegateModel { id: visualModel model: ListModel { ListElement { name: "Apple" } ListElement { name: "Orange" } } groups: [ DelegateModelGroup { name: "selected" } ] delegate: Rectangle { id: item height: 25 width: 200 Text { text: { var text = "Name: " + name if (item.DelegateModel.inSelected) text += " (" + item.DelegateModel.selectedIndex + ")" return text; } } MouseArea { anchors.fill: parent onClicked: item.DelegateModel.inSelected = !item.DelegateModel.inSelected } } } ListView { anchors.fill: parent model: visualModel } }
Atención: A diferencia de las propiedades adjuntas normales, éstas no pueden establecerse de forma declarativa. Lo siguiente daría lugar a un error:
delegate: Rectangle {
DelegateModel.inSelected: true
}items : DelegateModelGroup
Esta propiedad contiene el grupo por defecto al que se añaden todos los nuevos elementos.
model : model
Esta propiedad contiene el modelo que proporciona los datos para DelegateModel.
El modelo proporciona un conjunto de datos que se utiliza para crear los elementos de una vista. Para conjuntos de datos grandes o dinámicos, el modelo suele proporcionarlo un objeto modelo C++. El objeto modelo C++ debe ser una subclase de QAbstractItemModel o una lista simple.
Los modelos también pueden crearse directamente en QML, por ejemplo utilizando ListModel.
Véase también Modelos de datos.
parts : object
La propiedad parts selecciona un DelegateModel que crea delegados de la parte nombrada. Se utiliza junto con el tipo Package.
Por ejemplo, el código siguiente selecciona un modelo que crea delegados denominados lista a partir de un Package:
DelegateModel {
id: visualModel
delegate: Package {
Item { Package.name: "list" }
}
model: myModel
}
ListView {
width: 200; height:200
model: visualModel.parts.list
}Véase también Package.
persistedItems : DelegateModelGroup
Esta propiedad contiene el grupo de elementos persistentes del modelo delegado.
Los elementos de este grupo no se destruyen cuando son liberados por una vista, sino que se mantienen hasta que se eliminan del grupo.
Un elemento puede ser eliminado del grupo persistedItems estableciendo la propiedad DelegateModel.inPersistedItems a false. Si el elemento no es referenciado por una vista en ese momento será destruido. Al añadir un elemento a este grupo no se creará una nueva instancia.
Los elementos devueltos por la función QtQml.Models::DelegateModelGroup::create() se añaden automáticamente a este grupo.
rootIndex : QModelIndex
QAbstractItemModel proporciona un árbol jerárquico de datos, mientras que QML sólo opera con datos de lista. rootIndex permite que los hijos de cualquier nodo de un modelo QAbstractItemModel sean proporcionados por este modelo.
Esta propiedad sólo afecta a los modelos de tipo QAbstractItemModel que son jerárquicos (por ejemplo, un modelo de árbol).
Por ejemplo, he aquí un sencillo navegador interactivo de sistemas de archivos. Cuando se hace clic en un nombre de directorio, el rootIndex de la vista se establece en el nodo QModelIndex del directorio sobre el que se ha hecho clic, actualizando así la vista para mostrar el contenido del nuevo directorio.
main.cpp:
int main(int argc, char ** argv) { QGuiApplication app(argc, argv); QQuickView view; QFileSystemModel model; // start populating the model (doesn't change the model's root) model.setRootPath(QDir::currentPath()); qmlRegisterSingletonInstance("FileSystemModule", 1, 0, "FileSystemModel", &model); view.setSource(QUrl::fromLocalFile("view.qml")); view.show(); return app.exec(); }
view.qml:
import QtQuick import QtQml.Models import FileSystemModule pragma ComponentBehavior: Bound ListView { id: view width: 300 height: 400 model: DelegateModel { id: delegateModel model: FileSystemModel // singleton delegate: Rectangle { id: delegate required property int index required property string filePath required property bool hasModelChildren width: 300; height: 25 color: index % 2 ? palette.alternateBase : palette.base Text { anchors.verticalCenter: parent.verticalCenter color: palette.text text: delegate.filePath } TapHandler { onTapped: if (delegate.hasModelChildren) delegateModel.rootIndex = delegateModel.modelIndex(delegate.index) } } } }
Si model es una subclase de QAbstractItemModel, el delegado también puede hacer referencia a una propiedad hasModelChildren (opcionalmente calificada por un prefijo model.) que indica si el elemento del modelo del delegado tiene algún nodo hijo.
Véase también modelIndex() y parentModelIndex().
Documentación de propiedades adjuntas
DelegateModel.groups : list<string>
Esta propiedad adjunta contiene el nombre de los DelegateModelGroups a los que pertenece el elemento.
Se adjunta a cada instancia del delegado.
DelegateModel.inItems : bool
Esta propiedad adjunta contiene si el elemento pertenece al grupo por defecto items DelegateModelGroup .
Cambiando esta propiedad se añadirá o eliminará el elemento del grupo de elementos.
Se adjunta a cada instancia del delegado.
DelegateModel.inPersistedItems : bool
Esta propiedad adjunta contiene si el ítem pertenece a persistedItems DelegateModelGroup .
Cambiar esta propiedad añadirá o eliminará el elemento del grupo de elementos. Modifíquela con precaución, ya que la eliminación de un elemento del grupo persistedItems destruirá la instancia actual si no está referenciada por un modelo.
Se adjunta a cada instancia del delegado.
DelegateModel.isUnresolved : bool
Esta propiedad adjunta indica si el elemento visual está vinculado a un índice del modelo de datos. Devuelve true si el elemento no está vinculado al modelo, y false si lo está.
Un elemento sin resolver puede vincularse al modelo de datos mediante la función DelegateModelGroup::resolve().
Se adjunta a cada instancia del delegado.
DelegateModel.itemsIndex : int
Esta propiedad adjunta contiene el índice del elemento en el items DelegateModelGroup predeterminado.
Se adjunta a cada instancia del delegado.
DelegateModel.model : model
Esta propiedad adjunta contiene el modelo de datos al que pertenece esta instancia de delegado.
Se adjunta a cada instancia del delegado.
DelegateModel.persistedItemsIndex : int
Esta propiedad adjunta contiene el índice del elemento en persistedItems DelegateModelGroup .
Se adjunta a cada instancia del delegado.
Documentación del método
QModelIndex modelIndex(int index)
QAbstractItemModel proporciona un árbol jerárquico de datos, mientras que QML sólo opera con datos de lista. Esta función ayuda a utilizar modelos de árbol en QML.
Devuelve un QModelIndex para el index especificado. Este valor puede asignarse a rootIndex.
Véase también rootIndex.
QModelIndex parentModelIndex()
QAbstractItemModel proporciona un árbol jerárquico de datos, mientras que QML sólo opera con datos de lista. Esta función ayuda a utilizar modelos de árbol en QML.
Devuelve un QModelIndex para el padre del rootIndex actual. Este valor puede asignarse a rootIndex.
Véase también rootIndex.
© 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.