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.