QML-Werttypen
QML unterstützt sowohl integrierte als auch benutzerdefinierte Werttypen.
Ein Werttyp ist ein Typ, der konzeptionell als Wert und nicht als Referenz übergeben wird, wie beispielsweise „ int “ oder „ string “. Dies steht im Gegensatz zu QML-Objekttypen. Objekttypen werden als Referenz übergeben. Wenn Sie eine Instanz eines Objekttyps zwei verschiedenen Eigenschaften zuweisen, haben beide Eigenschaften denselben Wert. Eine Änderung am Objekt wirkt sich auf beide Eigenschaften aus. Wenn Sie eine Instanz eines Werttyps zwei verschiedenen Eigenschaften zuweisen, haben die Eigenschaften unterschiedliche Werte. Wenn Sie eine davon ändern, bleibt die andere unverändert. Werttypen werden nur konzeptionell per Wert übergeben, da es weiterhin möglich sein muss, mit ihnen so zu interagieren, als wären sie JavaScript-Objekte. Um dies zu ermöglichen, werden sie in der Praxis als Werttyp-Referenzen übergeben, wenn Sie von JavaScript-Code aus auf sie zugreifen.
Im Gegensatz zu einem Objekttyp kann ein Werttyp nicht zur Deklaration von QML-Objekten verwendet werden: Es ist beispielsweise nicht möglich, ein „ int{} “-Objekt oder ein „ size{} “-Objekt zu deklarieren.
Werttypen können verwendet werden, um auf Folgendes zu verweisen:
- einen einzelnen Wert (z. B. verweist „ int “ auf eine einzelne Zahl)
- Einen Wert, der Eigenschaften und Methoden enthält (z. B. verweist „ size “ auf einen Wert mit den Eigenschaften „
width“ und „height“) - Den generischen Typ „ var “. Er kann Werte jedes anderen Typs enthalten, ist aber selbst ein Werttyp.
Wenn eine Variable oder Eigenschaft einen Werttyp enthält und dieser einer anderen Variable oder Eigenschaft zugewiesen wird, wird eine Kopie des Werts erstellt.
Verfügbare Werttypen
Einige Werttypen werden von der Engine standardmäßig unterstützt und erfordern keine Importanweisung, während bei anderen der Client das Modul importieren muss, das sie bereitstellt. Alle unten aufgeführten Werttypen können in einem QML-Dokument als „ property “-Typ verwendet werden, mit folgenden Ausnahmen:
void, das das Fehlen eines Werts kennzeichnetlistmuss in Verbindung mit einem Objekt- oder Werttyp als Element verwendet werden
Von der QML-Sprache bereitgestellte integrierte Werttypen
Die in der QML-Sprache nativ unterstützten integrierten Werttypen sind nachfolgend aufgeführt:
Binärer Wert „true/false“ | |
Datumswert | |
Zahl mit Dezimalpunkt, gespeichert in doppelter Genauigkeit | |
Ganzzahl, z. B. 0, 10 oder -20 | |
Liste von QML-Objekten | |
Zahl mit Dezimalpunkt | |
Eine frei formatierte Textzeichenfolge | |
Ressourcen-Locator | |
Generischer Eigenschaftstyp | |
Generischer Eigenschaftstyp | |
Leerer Werttyp |
Von QML-Modulen bereitgestellte Werttypen
QML-Module können die QML-Sprache um weitere Werttypen erweitern.
Beispielsweise sind die vom Modul „ QtQml “ bereitgestellten Werttypen:
Wert, der eine Beschleunigungskurve darstellt | |
Wert mit x- und y-Attributen | |
Wert, der auf eine Eigenschaft eines Objekts verweist | |
Wert mit den Attributen x, y, width und height | |
Wert mit den Attributen „width“ und „height“ |
Die vom Modul „ QtQuick “ bereitgestellten Werttypen sind:
Ein ARGB-Farbwert | |
Schriftartwert mit den Eigenschaften von QFont. Der Schriftarttyp bezieht sich auf einen Schriftartwert mit den Eigenschaften von QFont | |
Ein Typ „matrix4x4“ ist eine Matrix mit 4 Zeilen und 4 Spalten | |
Ein Quaternion-Typ verfügt über die Attribute „scalar“, „x“, „y“ und „z“ | |
Ein „vector2d“-Typ verfügt über die Attribute „x“ und „y“ | |
Wert mit den Attributen x, y und z | |
Ein „vector4d“-Typ verfügt über die Attribute x, y, z und w |
Das globale Objekt „ Qt “ stellt „ useful functions “ zur Bearbeitung von Werten der Werttypen für den Qt Qml und Qt Quick Module.
Andere Qt-Module dokumentieren ihre Werttypen auf ihren jeweiligen Modulseiten.
Sie können eigene Werttypen definieren, wie unter „Definieren von QML-Typen aus C++“ beschrieben. Um die von einem bestimmten QML-Modul bereitgestellten Typen nutzen zu können, müssen Clients dieses Modul in ihre QML-Dokumente importieren.
Verhalten bei Eigenschaftsänderungen für Werttypen
Einige Werttypen verfügen über Eigenschaften: Der Typ „ font “ hat beispielsweise die Eigenschaften „ pixelSize “, „ family “ und „ bold “. Im Gegensatz zu Eigenschaften von Objekttypen stellen Eigenschaften von Werttypen keine eigenen Signale bei Eigenschaftsänderungen bereit. Es ist nur möglich, einen Signal-Handler für die Eigenschaftsänderung des Werttyps selbst zu erstellen:
Text {
// invalid!
onFont.pixelSizeChanged: doSomething()
// also invalid!
font {
onPixelSizeChanged: doSomething()
}
// but this is ok
onFontChanged: doSomething()
}Beachten Sie jedoch, dass ein Signal zur Eigenschaftsänderung für einen Werttyp immer dann ausgelöst wird, wenn sich eines seiner Attribute geändert hat, sowie wenn sich die Eigenschaft selbst ändert. Betrachten Sie beispielsweise den folgenden Code:
Text {
onFontChanged: console.log("font changed")
Text { id: otherText }
focus: true
// changing any of the font attributes, or reassigning the property
// to a different font value, will invoke the onFontChanged handler
Keys.onDigit1Pressed: font.pixelSize += 1
Keys.onDigit2Pressed: font.b = !font.b
Keys.onDigit3Pressed: font = otherText.font
}Im Gegensatz dazu senden Eigenschaften eines Objekttyps ihre eigenen Signale bei Eigenschaftsänderungen aus, und ein Signalhandler für eine Eigenschaft eines Objekttyps wird nur aufgerufen, wenn die Eigenschaft einem anderen Objektwert zugewiesen wird.
Siehe auch Das QML-Typsystem.
© 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.