Sur cette page

var QML Value Type

un type de propriété générique. Plus d'informations...

Description détaillée

Le type var est un type de propriété générique qui peut faire référence à n'importe quel type de données.

Il est équivalent à une variable JavaScript ordinaire. Par exemple, les propriétés var peuvent stocker des nombres, des chaînes, des objets, des tableaux et des fonctions :

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"; })
}

Sémantique des notifications de changement

Il est important de noter que les modifications apportées aux propriétés ordinaires des objets JavaScript affectés à une propriété var ne déclencheront pas de mises à jour des liaisons qui y accèdent. L'exemple ci-dessous affichera "La voiture a 4 roues", car la modification de la propriété "wheels" n'entraînera pas la réévaluation de la liaison affectée à la propriété "text" :

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

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

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

Si le gestionnaire onCompleted avait plutôt "car = new Object({wheels: 6})", le texte serait mis à jour et afficherait "The car has 6 wheels", puisque la propriété car elle-même serait modifiée, ce qui entraînerait l'émission d'une notification de changement.

Sémantique d'initialisation des valeurs de propriété

La syntaxe QML définit que les accolades sur le côté droit d'une affectation d'initialisation de valeur de propriété dénotent une affectation de liaison. Cela peut prêter à confusion lors de l'initialisation d'une propriété var, car les accolades vides en JavaScript peuvent indiquer soit un bloc d'expression, soit une déclaration d'objet vide. Si vous souhaitez initialiser une propriété var à une valeur d'objet vide, vous devez mettre les accolades entre parenthèses.

Les propriétés de type var sont undefined par défaut.

Par exemple, dans l'exemple précédent, la propriété

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

Dans l'exemple précédent, la propriété first est liée à une expression vide, dont le résultat est indéfini. La propriété second est liée à une expression qui contient un seul bloc d'expression vide ("{}"), dont le résultat est également indéfini. La propriété third est liée à une expression qui est évaluée comme une déclaration d'objet vide, et donc la propriété sera initialisée avec cette valeur d'objet vide.

De même, un deux-points en JavaScript peut être soit une affectation de valeur de propriété d'objet, soit une étiquette de code. Ainsi, l'initialisation d'une propriété var avec une déclaration d'objet peut également nécessiter des parenthèses :

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'
    }
}

Voir également les types de valeurs QML.

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