Spec-Zone.ru › Qt 5.6

Тип 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 привязано к пустому выражению, результат которого — неопределено. Свойство 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.6/qml-var.html

Spec-Zone.ru

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