QML-Sequenztypen
Für jeden Objekttyp und Werttyp wird automatisch ein Sequenztyp zur Speicherung mehrerer Instanzen dieses Typs bereitgestellt. Mit dem Schlüsselwort „ list “ können Sie Eigenschaften vom Typ „Sequenz“ erstellen:
import QtQml
QtObject {
property list<int> ints: [1, 2, 3, 4]
property list<Connection> connections: [
Connection {
// ...
},
Connection {
// ...
}
]
}Sequenzen von Werttypen werden als „ QList “ implementiert, Sequenzen von Objekttypen als „ QQmlListProperty “.
Sequenzen in QML verhalten sich im Allgemeinen wie der JavaScript-Typ ` Array `, wobei es einige wichtige Unterschiede gibt, die sich aus der Verwendung eines C++-Speichertyps in der Implementierung ergeben:
- Das Löschen eines Elements aus einer Sequenz führt dazu, dass dieses Element durch einen standardkonstruierten Wert ersetzt wird und nicht durch einen Wert vom Typ „
undefined“. - Wird die Eigenschaft `
length` einer Sequenz auf einen Wert gesetzt, der größer ist als ihr aktueller Wert, wird die Sequenz mit standardkonstruierten Elementen auf die angegebene Länge aufgefüllt, anstatt mit Elementen vom Typ `undefined`. - Die Qt-Containerklassen unterstützen vorzeichenbehaftete (anstelle von vorzeichenlosen) ganzzahlige Indizes; daher schlägt der Versuch, auf einen Index zuzugreifen, der größer ist als die maximale Anzahl, die „ qsizetype “ aufnehmen kann, fehl.
Wenn Sie Elemente aus einer Sequenz entfernen möchten, anstatt sie einfach durch standardmäßig konstruierte Werte zu ersetzen, verwenden Sie nicht den indizierten Löschoperator (delete sequence[i]), sondern stattdessen die Funktion „ splice “ (sequence.splice(startIndex, deleteCount)).
Im Allgemeinen kann jeder von ` QMetaSequence ` erkennbare Container über die Methoden ` Q_PROPERTY ` oder ` Q_INVOKABLE ` von C++ an QML übergeben werden. Dies umfasst unter anderem alle registrierten ` QList`, ` QQueue`, ` QStack`, ` QSet`, `std::list` und `std::vector`, die einen mit ` Q_DECLARE_METATYPE` markierten Typ enthalten.
Die Verwendung einer Sequenz über QMetaSequence führt zu aufwendigen Datenkonvertierungen. Um diese Konvertierungen zu vermeiden, können Sie Ihre eigenen anonymen Sequenztypen mithilfe von QML_SEQUENTIAL_CONTAINER aus C++ registrieren. Auf diese Weise registrierte Typen verhalten sich wie die vordefinierten Sequenztypen und werden unverändert gespeichert. Sie haben jedoch keine QML-Namen.
Warnung: Sequenzen , die als C++-Container wie QList oder std::vector gespeichert sind, unterliegen den Auswirkungen, die durch QML-Werttypen und Sequenzreferenzen verursacht werden, und sollten daher mit Vorsicht behandelt werden. QQmlListProperty ist davon nicht betroffen, da es sich lediglich um eine Ansicht für einen zugrunde liegenden Container handelt. C++-Standardcontainer wie std::vector werden nicht implizit gemeinsam genutzt. Daher führt das Kopieren dieser Container immer zu einer tiefen Kopie. Da eine aus einer Eigenschaft gelesene Sequenz immer mindestens einmal kopiert werden muss, ist die Verwendung solcher Container als QML-Sequenzen relativ aufwendig, selbst wenn Sie sie nicht über QML ändern.
Das Modul „ QtQml “ enthält einige „ sequence types “, die Sie möglicherweise verwenden möchten.
© 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.