En esta página

QQmlListProperty Class

template <typename T> class QQmlListProperty

La clase QQmlListProperty permite a las aplicaciones exponer propiedades tipo lista de clases derivadas de QObject a QML. Más...

Cabecera: #include <QQmlListProperty>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml

Tipos públicos

Funciones Públicas

QQmlListProperty(QObject *object, QList<T *> *list)
QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at)
QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear)
QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear, QQmlListProperty<T>::ReplaceFunction replace, QQmlListProperty<T>::RemoveLastFunction removeLast)
bool operator==(const QQmlListProperty<T> &other) const

Variables públicas

void *data
QObject *object

Macros

Descripción detallada

QML tiene muchas propiedades de lista, donde se puede asignar más de un valor de objeto. El uso de una propiedad de lista de QML tiene el siguiente aspecto:

FruitBasket {
    fruit: [
        Apple {},
        Orange{},
        Banana{}
    ]
}

QQmlListProperty encapsula un grupo de punteros a funciones que representan el conjunto de acciones que QML puede realizar sobre la lista: añadir elementos, recuperar elementos y borrar la lista. En el futuro, es posible que se admitan operaciones adicionales. Todas las propiedades de lista deben implementar la operación append, pero el resto son opcionales.

Para proporcionar una propiedad de lista, una clase C++ debe implementar los callbacks de la operación, y luego devolver un valor QQmlListProperty apropiado desde el getter de la propiedad. Las propiedades de lista no deben tener setter. En el ejemplo anterior, la declaración Q_PROPERTY() tendrá este aspecto:

Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)

Las propiedades de lista QML son de tipo seguro - en este caso Fruit es un tipo QObject del que derivan Apple, Orange y Banana.

Puedes utilizar QQmlListReference para manipular una QQmlListProperty desde C++ utilizando una API ligeramente más ergonómica, a costa de cierta sobrecarga.

Véase también el Capítulo 5: Uso de los tipos de propiedades de lista y QQmlListReference.

Documentación de tipos de miembros

[alias] QQmlListProperty::AppendFunction

Sinónimo de void (*)(QQmlListProperty<T> *property, T *value).

Añadir value a la lista property.

[alias] QQmlListProperty::AtFunction

Sinónimo de T *(*)(QQmlListProperty<T> *property, qsizetype index).

Devuelve el elemento en la posición index de la lista property.

[alias] QQmlListProperty::ClearFunction

Sinónimo de void (*)(QQmlListProperty<T> *property).

Borrar la lista property.

[alias] QQmlListProperty::CountFunction

Sinónimo de qsizetype (*)(QQmlListProperty<T> *property).

Devuelve el número de elementos de la lista property.

[alias] QQmlListProperty::RemoveLastFunction

Sinónimo de void (*)(QQmlListProperty<T> *property).

Eliminar el último elemento de la lista property.

[alias] QQmlListProperty::ReplaceFunction

Sinónimo de void (*)(QQmlListProperty<T> *property, qsizetype index, T *value).

Sustituye el elemento en la posición index de la lista property por value.

Documentación de las funciones miembro

QQmlListProperty::QQmlListProperty(QObject *object, QList<T *> *list)

Constructor de conveniencia para hacer un valor QQmlListProperty a partir de un QList list existente. El object propietario de la lista y el propio list deben proporcionarse y mantenerse vivos mientras se mantenga un QQmlListProperty que haga referencia a ellos.

Esta es la forma más fácil y segura de proporcionar una QQmlListProperty respaldada por un QList y debería utilizarse en la mayoría de los casos. Una invocación típica tiene este aspecto:

QQmlListProperty<PieSlice> PieChart::slices()
{
    return QQmlListProperty<PieSlice>(this, &m_slices);
}

QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at)

Construye una QQmlListProperty de sólo lectura a partir de un conjunto de funciones de operación count y at. Se puede pasar un manejador opaco data al que se puede acceder desde las funciones de operación. La propiedad de lista sigue siendo válida mientras exista el object al que pertenece la propiedad de lista.

QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear)

Construye una QQmlListProperty a partir de un conjunto de funciones de operación append, count, at, y clear. Se puede pasar un manejador opaco data al que se puede acceder desde las funciones de operación. La propiedad de lista sigue siendo válida mientras exista el object propietario de la propiedad de lista.

Se pueden pasar punteros nulos para cualquier función. Si se pasan punteros nulos, la lista no podrá ser diseñada ni alterada por el depurador. Se recomienda proporcionar punteros válidos para todas las funciones.

Nota: La QQmlListProperty resultante sintetizará los métodos removeLast() y replace() usando count, at, clear, y append si todos ellos son dados. Esto es lento. Si pretende manipular la lista más allá de limpiarla, debería proporcionar explícitamente estos métodos.

QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear, QQmlListProperty<T>::ReplaceFunction replace, QQmlListProperty<T>::RemoveLastFunction removeLast)

Construye una QQmlListProperty a partir de un conjunto de funciones de operación append, count, at, clear, replace, y removeLast. Se puede pasar un manejador opaco data al que se puede acceder desde las funciones de operación. La propiedad de lista sigue siendo válida mientras exista el object propietario de la propiedad de lista.

Se pueden pasar punteros nulos para cualquier función, haciendo que la función respectiva se sintetice utilizando las otras, si es posible. QQmlListProperty puede sintetizar

  • clear usando count y removeLast
  • replace usando count, at, clear, y append
  • replace usando count, at, removeLast, y append
  • removeLast utilizando count, at, clear, y append

si se proporcionan. Esto es lento, pero si su lista no proporciona de forma nativa opciones más rápidas para estas primitivas, es posible que desee utilizar las sintetizadas.

Además, si cualquiera de count, at, append, y clear no son dadas explícitamente o sintetizadas, la lista no será ni diseñable ni alterable por el depurador. Se recomienda proporcionar suficientes punteros válidos para evitar esta situación.

bool QQmlListProperty::operator==(const QQmlListProperty<T> &other) const

Devuelve true si este QQmlListProperty es igual a other, en caso contrario false.

Documentación de la variable miembro

void *QQmlListProperty::data

Este campo puede contener un puntero de datos arbitrario

Si implementas manualmente los métodos de acceso y necesitas almacenar datos personalizados, puedes pasar un puntero arbitrario al constructor de QQmlListProperty y recuperarlo del campo de datos cuando accedas al mismo QQmlListProperty más tarde.

Un QQmlListProperty constructed from a QList pointer utiliza este campo para almacenar el puntero a la propia lista, ya que no puede acceder directamente al contenido de la lista desde el propietario.

QObject *QQmlListProperty::object

Este campo contiene el propietario de la QQmlListProperty

Cuando implemente manualmente los métodos de acceso, puede que necesite utilizar este campo para recuperar el contenido de la lista manipulada.

Documentación de macros

QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND

Esta macro define el comportamiento de las propiedades de lista de esta clase a Append. Cuando se asigna la propiedad en un tipo derivado, los valores se anexan a los de la clase base. Este es el comportamiento por defecto.

class FruitBasket : QObject {
    Q_OBJECT
    QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND
    Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)

    public:
    // ...
    QQmlListProperty<Fruit> fruit();
    // ...
};

Véase también QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT, QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE, y Definición de tipos de objeto mediante documentos QML.

QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE

Esta macro define el comportamiento de las propiedades de lista de esta clase a Reemplazar. Cuando se asigna la propiedad en un tipo derivado, los valores reemplazan a los de la clase base.

class FruitBasket : QObject {
    Q_OBJECT
    QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE
    Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)

    public:
    // ...
    QQmlListProperty<Fruit> fruit();
    // ...
};

Véase también QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND, QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT, y Definición de tipos de objeto mediante documentos QML.

QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT

Esta macro define el comportamiento de las propiedades de lista de esta clase a ReplaceIfNotDefault. Cuando se asigna la propiedad en un tipo derivado, los valores reemplazan a los de la clase base a menos que sea la propiedad por defecto. En el caso de la propiedad por defecto, los valores se añaden a los de la clase base.

class FruitBasket : QObject {
    Q_OBJECT
    QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT
    Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)

    public:
    // ...
    QQmlListProperty<Fruit> fruit();
    // ...
};

Véase también QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND, QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE, y Definición de tipos de objeto mediante documentos QML.

© 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.