Sur cette page

var QML Value Type

un type de propriété générique. En savoir plus…

Description détaillée

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

Il est équivalent à une variable JavaScript classique. Par exemple, les propriétés « var » peuvent stocker des nombres, des chaînes de caractères, 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 modification

Il est important de noter que les modifications apportées aux propriétés classiques des objets JavaScript assignées à une propriété `var` ne déclencheront pas la mise à 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 assigné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 la forme "car = new Object({wheels: 6})", le texte serait alors mis à jour pour indiquer « La voiture a 6 roues », car la propriété car elle-même serait modifiée, ce qui entraînerait l’émission d’une notification de changement.

Sémantique de l’initialisation des valeurs de propriété

La syntaxe QML définit que les accolades situées à droite d’une affectation d’initialisation de valeur de propriété indiquent une affectation de liaison. Cela peut prêter à confusion lors de l’initialisation d’une propriété de type « var », car en JavaScript, des accolades vides peuvent désigner soit un bloc d’expression, soit une déclaration d’objet vide. Si vous souhaitez initialiser une propriété de type « var » à une valeur d’objet vide, vous devez placer les accolades entre parenthèses.

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

Par exemple :

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 contenant 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 ; la propriété sera donc initialisée avec la valeur de cet objet vide.

De même, en JavaScript, les deux-points peuvent correspondre soit à une affectation de valeur à une propriété d’objet, soit à un étiquette de code. Ainsi, l’initialisation d’une propriété `var` à l’aide d’une déclaration d’objet peut également nécessiter l’utilisation de 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 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.