QML-Wertetypen
QML unterstützt eingebaute und benutzerdefinierte Wertetypen.
Ein Wertetyp ist ein Typ, der konzeptionell als Wert und nicht als Referenz übergeben wird, wie z.B. int
oder string
. Dies steht im Gegensatz zu QML-Objekttypen. Objekttypen werden per Referenz übergeben. Wenn Sie eine Instanz eines Objekttyps zwei verschiedenen Eigenschaften zuweisen, haben beide Eigenschaften denselben Wert. Die Änderung des Objekts spiegelt sich in beiden Eigenschaften wider. Wenn Sie eine Instanz eines Werttyps zwei verschiedenen Eigenschaften zuweisen, tragen die Eigenschaften getrennte Werte. Wenn Sie eine von ihnen ändern, bleibt die andere gleich. Wertetypen werden nur konzeptionell als Wert übergeben, denn es muss immer noch möglich sein, mit ihnen zu interagieren, als wären sie JavaScript-Objekte. Um dies zu erleichtern, werden sie in Wirklichkeit als Werttypreferenzen übergeben, wenn Sie von JavaScript-Code aus auf sie zugreifen.
Im Gegensatz zu einem Objekttyp kann ein Wertetyp nicht verwendet werden, um QML-Objekte zu deklarieren: Es ist z. B. nicht möglich, ein int{}
-Objekt oder ein size{}
-Objekt zu deklarieren.
Wertetypen können verwendet werden, um auf etwas zu verweisen:
- einen einzelnen Wert (z.B. int bezieht sich auf eine einzelne Zahl)
- einen Wert, der Eigenschaften und Methoden enthält (z. B. size bezieht sich auf einen Wert mit den Eigenschaften
width
undheight
) - Der generische Typ var. Er kann Werte eines beliebigen anderen Typs enthalten, ist aber selbst ein Wertetyp.
Wenn eine Variable oder Eigenschaft einen Werttyp enthält und dieser einer anderen Variablen oder Eigenschaft zugewiesen wird, wird eine Kopie des Wertes erstellt.
Verfügbare Wertetypen
Einige Werttypen werden von der Engine standardmäßig unterstützt und erfordern keine Importanweisung, während andere den Client dazu zwingen, das Modul zu importieren, das sie bereitstellt. Alle unten aufgeführten Wertetypen können als property
Typ in einem QML-Dokument verwendet werden, mit den folgenden Ausnahmen:
void
, der das Fehlen eines Wertes markiertlist
muss in Verbindung mit einem Objekt oder Werttyp als Element verwendet werdenenumeration
kann nicht direkt verwendet werden, da die Aufzählung durch einen registrierten QML-Objekttyp definiert sein muss
Eingebaute Wertetypen in der QML-Sprache
Im Folgenden sind die eingebauten Wertetypen aufgeführt, die von der QML-Sprache nativ unterstützt werden:
Binärer Wahr/Falsch-Wert | |
Datumswert | |
Zahl mit Dezimalpunkt, gespeichert in doppelter Genauigkeit | |
Benannter Aufzählungswert | |
Ganze Zahl, z. B. 0, 10 oder -20 | |
Liste von QML-Objekten | |
Zahl mit einem Dezimalpunkt | |
Freiform-Textstring | |
Ressourcen-Locator | |
Generischer Eigenschaftstyp | |
Generischer Eigenschaftstyp | |
Leerer Werttyp |
Von QML-Modulen bereitgestellte Wertetypen
QML-Module können die QML-Sprache um weitere Wertetypen erweitern.
Die vom Modul QtQml
bereitgestellten Wertetypen sind zum Beispiel:
Wert mit x- und y-Attributen | |
Wert mit den Attributen x, y, Breite und Höhe | |
Wert mit den Attributen width und height |
Die vom Modul QtQuick
bereitgestellten Wertetypen sind:
ARGB-Farbwert | |
Schriftwert mit den Eigenschaften von QFont. Der Schrifttyp bezieht sich auf einen Schriftwert mit den Eigenschaften von QFont | |
Ein Matrix4x4-Typ ist eine 4-zeilige und 4-spaltige Matrix | |
Ein Quaternion-Typ hat Skalar-, x-, y- und z-Attribute | |
Ein vector2d-Typ hat x- und y-Attribute | |
Wert mit x-, y- und z-Attributen | |
Der Typ vector4d hat die Attribute x, y, z und w |
Das globale Objekt Qt bietet useful functions zur Manipulation von Werten der Wertetypen für die Qt Qml und Qt Quick Module.
Andere Qt-Module dokumentieren ihre Wertetypen auf ihren jeweiligen Modulseiten.
Sie können Ihre eigenen Wertetypen definieren, wie in Defining QML Types from C++ beschrieben. Um Typen zu verwenden, die von einem bestimmten QML-Modul bereitgestellt werden, müssen Clients dieses Modul in ihren QML-Dokumenten importieren.
Eigenschaftsänderungsverhalten für Wertetypen
Einige Wertetypen haben Eigenschaften: Der Typ font hat beispielsweise die Eigenschaften pixelSize
, family
und bold
. Im Gegensatz zu Eigenschaften von Objekttypen bieten Eigenschaften von Werttypen keine eigenen Eigenschaftsänderungssignale. Es ist nur möglich, einen Handler für ein Eigenschaftsänderungssignal für die Eigenschaft 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 Eigenschaftsänderungssignal für einen Werttyp immer dann ausgegeben wird, wenn sich eines seiner Attribute geändert hat, und auch dann, wenn sich die Eigenschaft selbst ändert. Nehmen Sie zum Beispiel 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 Eigenschaftsänderungssignale aus, und ein Eigenschaftsänderungssignal-Handler für eine Eigenschaft vom Objekttyp wird nur dann aufgerufen, wenn die Eigenschaft einem anderen Objektwert neu zugewiesen wird.
Siehe auch Das QML-Typensystem.
© 2025 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.