Tipos de secuencia QML
Para cada tipo de objeto y tipo de valor se dispone automáticamente de un tipo de secuencia para almacenar múltiples instancias del tipo. Puede utilizar la palabra clave list para crear propiedades de tipos de secuencia:
import QtQml QtObject { property list<int> ints: [1, 2, 3, 4] property list<Connection> connections: [ Connection { // ... }, Connection { // ... } ] }
Las secuencias de tipos de valor se implementan como QList y las secuencias de tipos de objeto se implementan como QQmlListProperty.
En general, las secuencias en QML se comportan como el tipo Array de JavaScript, con algunas diferencias importantes derivadas del uso de un tipo de almacenamiento C++ en la implementación:
- Al eliminar un elemento de una secuencia, ese elemento será sustituido por un valor construido por defecto, en lugar de por un valor de
undefined. - Establecer la propiedad
lengthde una secuencia a un valor mayor que su valor actual hará que la secuencia se rellene hasta la longitud especificada con elementos construidos por defecto en lugar de elementos deundefined. - Las clases contenedoras de Qt admiten índices enteros con signo (en lugar de sin signo); por lo tanto, si se intenta acceder a cualquier índice superior al número máximo que puede contener qsizetype, se producirá un error.
Si desea eliminar elementos de una secuencia en lugar de simplemente reemplazarlos por valores construidos por defecto, no utilice el operador de borrado indexado (delete sequence[i]) sino la función splice (sequence.splice(startIndex, deleteCount)).
En general, cualquier contenedor reconocible por QMetaSequence puede pasarse de C++ a QML a través de los métodos Q_PROPERTY o Q_INVOKABLE. Esto incluye, entre otros, todos los registrados QList, QQueue, QStack, QSet, std::list, std::vector que contengan un tipo marcado con Q_DECLARE_METATYPE.
El uso de una secuencia a través de QMetaSequence da lugar a costosas conversiones de datos. Para evitar las conversiones puede registrar sus propios tipos de secuencia anónimos utilizando QML_SEQUENTIAL_CONTAINER de C++. Los tipos registrados de esta forma se comportan como los tipos de secuencia predefinidos y se almacenan tal cual. Sin embargo, no tienen nombres QML.
Atención: Las secuencias almacenadas como un contenedor C++ como QList o std::vector están sujetas a los efectos causados por QML Value Type y Sequence References, por lo que deben manejarse con cuidado. QQmlListProperty no se ve afectada, ya que sólo es una vista para un contenedor subyacente. Los contenedores estándar de C++ como std::vector no se comparten implícitamente. Por lo tanto, copiarlos siempre produce una copia profunda. Dado que una secuencia leída desde una propiedad siempre tiene que copiarse al menos una vez, utilizar tales contenedores como secuencias QML es bastante caro, incluso si no los modificas desde QML.
El módulo QtQml contiene algunos sequence types que puede que desee utilizar.
© 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.