Auf dieser Seite

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 kennzeichnet
  • list muss 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:

bool

Binärer Wert „true/false“

date

Datumswert

double

Zahl mit Dezimalpunkt, gespeichert in doppelter Genauigkeit

int

Ganzzahl, z. B. 0, 10 oder -20

list

Liste von QML-Objekten

real

Zahl mit Dezimalpunkt

string

Eine frei formatierte Textzeichenfolge

url

Ressourcen-Locator

var

Generischer Eigenschaftstyp

variant

Generischer Eigenschaftstyp

void

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:

easingCurve

Wert, der eine Beschleunigungskurve darstellt

point

Wert mit x- und y-Attributen

qmlProperty

Wert, der auf eine Eigenschaft eines Objekts verweist

rect

Wert mit den Attributen x, y, width und height

size

Wert mit den Attributen „width“ und „height“

Die vom Modul „ QtQuick “ bereitgestellten Werttypen sind:

color

Ein ARGB-Farbwert

font

Schriftartwert mit den Eigenschaften von QFont. Der Schriftarttyp bezieht sich auf einen Schriftartwert mit den Eigenschaften von QFont

matrix4x4

Ein Typ „matrix4x4“ ist eine Matrix mit 4 Zeilen und 4 Spalten

quaternion

Ein Quaternion-Typ verfügt über die Attribute „scalar“, „x“, „y“ und „z“

vector2d

Ein „vector2d“-Typ verfügt über die Attribute „x“ und „y“

vector3d

Wert mit den Attributen x, y und z

vector4d

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.