var QML 值类型

一个通用的属性类型。 更多信息...

详细描述

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

变更通知语义

需要注意的是,赋给 var 属性的 JavaScript 对象的常规属性更改不会触发访问它们的绑定更新。以下示例将显示 "The car has 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})",则文本将更新为 "The car has 6 wheels",因为 car 属性本身发生了变化,这会产生一个变更通知。

属性值初始化语义

QML 语法定义,在属性值初始化赋值中的右侧花括号表示绑定赋值。在初始化 var 属性时,这可能会造成混淆,因为 JavaScript 中的空花括号可以表示表达式块或空对象声明。如果您希望初始化 var 属性为空对象值,应该将花括号用括号包裹。

默认情况下,类型为 var 的属性为 undefined

例如

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

在上一个示例中,first 属性绑定到一个空表达式,其结果为 undefined。第二个属性绑定到一个包含单个空表达式块 ("{}") 的表达式,其结果同样是 undefined。第三个属性绑定到的表达式被评估为一个空对象声明,因此该属性将初始化为那个空对象值。

同样,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 值类型.

© 2024 Qt 公司有限公司。本文件中包含的文档贡献是各自所有者的版权。在此提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 及其相关标志是芬兰的 Qt 公司以及/或在全世界其他国家的商标。所有其他商标均为其各自所有者的财产。