var QML Value Type

ein generischer Eigenschaftstyp. Mehr...

Detaillierte Beschreibung

Der Typ var ist ein allgemeiner Eigenschaftstyp, der sich auf jeden Datentyp beziehen kann.

Er entspricht einer normalen JavaScript-Variable. Zum Beispiel können var-Eigenschaften Zahlen, Strings, Objekte, Arrays und Funktionen speichern:

Item {
    property var aNumber: 100
    property var aBool: false
    property var aString: "Hello world!"
    property var anotherString: String("#FF008800")
    property var aColor: Qt.rgba(0.2, 0.3, 0.4, 0.5)
    property var aRect: Qt.rect(10, 10, 10, 10)
    property var aPoint: Qt.point(10, 10)
    property var aSize: Qt.size(10, 10)
    property var aVector3d: Qt.vector3d(100, 100, 100)
    property var anArray: [1, 2, 3, "four", "five", (function() { return "six"; })]
    property var anObject: { "foo": 10, "bar": 20 }
    property var aFunction: (function() { return "one"; })
}

Semantik der Änderungsbenachrichtigung

Es ist wichtig zu beachten, dass Änderungen in regulären Eigenschaften von JavaScript-Objekten, die einer var-Eigenschaft zugewiesen sind, keine Aktualisierungen der Bindungen auslösen, die auf sie zugreifen. Im folgenden Beispiel wird "Das Auto hat 4 Räder" angezeigt, da die Änderung der Eigenschaft "Räder" nicht zur Neubewertung der Bindung führt, die der Eigenschaft "text" zugewiesen ist:

Item {
    property var car: new Object({wheels: 4})

    Text {
        text: "The car has " + car.wheels + " wheels";
    }

    Component.onCompleted: {
        car.wheels = 6;
    }
}

Hätte der onCompleted-Handler stattdessen "car = new Object({wheels: 6})", würde der Text auf "Das Auto hat 6 Räder" aktualisiert, da die Eigenschaft "car" selbst geändert würde, was eine Änderungsmeldung auslöst.

Semantik der Initialisierung von Eigenschaftswerten

In der QML-Syntax ist festgelegt, dass geschweifte Klammern auf der rechten Seite einer Initialisierungszuweisung für einen Eigenschaftswert eine Bindungszuweisung darstellen. Dies kann bei der Initialisierung einer var Eigenschaft verwirrend sein, da leere geschweifte Klammern in JavaScript entweder einen Ausdrucksblock oder eine leere Objektdeklaration bezeichnen können. Wenn Sie eine var Eigenschaft mit einem leeren Objektwert initialisieren möchten, sollten Sie die geschweiften Klammern in Klammern einschließen.

Eigenschaften des Typs var sind standardmäßig undefined.

Ein Beispiel:

Item {
    property var first:  {}   // nothing = undefined
    property var second: {{}} // empty expression block = undefined
    property var third:  ({}) // empty object
}

Im vorherigen Beispiel ist die Eigenschaft first an einen leeren Ausdruck gebunden, dessen Ergebnis undefiniert ist. Die Eigenschaft second ist an einen Ausdruck gebunden, der einen einzelnen, leeren Ausdrucksblock ("{}") enthält, der ebenfalls ein undefiniertes Ergebnis hat. Die Eigenschaft third ist an einen Ausdruck gebunden, der als leere Objektdeklaration ausgewertet wird, und daher wird die Eigenschaft mit diesem leeren Objektwert initialisiert.

In ähnlicher Weise kann ein Doppelpunkt in JavaScript entweder eine Objekt-Eigenschaftswert-Zuweisung oder ein Code-Label sein. So kann die Initialisierung einer var-Eigenschaft mit einer Objektdeklaration auch Klammern erfordern:

Item {
    property var first: { example: 'true' }    // example is interpreted as a label
    property var second: ({ example: 'true' }) // example is interpreted as a property
    property var third: { 'example': 'true' }  // example is interpreted as a property
    Component.onCompleted: {
        console.log(first.example) // prints 'undefined', as "first" was assigned a string
        console.log(second.example) // prints 'true'
        console.log(third.example) // prints 'true'
    }
}

Siehe auch QML-Wertetypen.

© 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.