Spec-Zone.ru › Qt 5.11

Тип QML var

общий тип свойства.

Тип var — это общий тип свойства, который может ссылаться на любой тип данных.

Он эквивалентен обычной переменной JavaScript. Например, переменные var могут хранить числа, строки, объекты, массивы и функции:

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

Семантика уведомлений о изменениях

Важно отметить, что изменения в обычных свойствах объектов JavaScript, присвоенных свойству var, не будут вызывать обновлений привязок, которые обращаются к ним. В приведенном ниже примере будет отображено "Машина имеет 4 колеса", так как изменение свойства wheels не вызовет повторной оценки привязки, присвоенной свойству "text":

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

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

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

Если обработчик onCompleted вместо этого содержал "car = new Object({wheels: 6})", то текст будет обновлён на "Машина имеет 6 колёс", поскольку само свойство car будет изменено, что вызывает отправку уведомления об изменении.

Семантика инициализации значения свойства

Синтаксис QML определяет, что фигурные скобки в правой части присваивания инициализации значения свойства обозначают привязку. Это может быть запутанно при инициализации свойства var, поскольку пустые фигурные скобки в JavaScript могут обозначать либо блок выражения, либо объявление пустого объекта. Если вы хотите инициализировать свойство var значением пустого объекта, вы должны заключить фигурные скобки в скобки.

Например:

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

В предыдущем примере свойство first привязано к пустому выражению, результат которого — undefined. Свойство second привязано к выражению, содержащему один пустой блок выражения ("{}"), который также имеет неопределенный результат. Свойство third привязано к выражению, которое оценивается как объявление пустого объекта, и, следовательно, свойство будет инициализировано этим значением пустого объекта.

Аналогично, двоеточие в JavaScript может быть либо присваиванием значения свойства объекта, либо меткой кода. Таким образом, для инициализации свойства var объявлением объекта также могут потребоваться скобки:

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

См. такжеОсновные типы QML.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qml-var.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API