1.property介绍
- property用来自定义一个属性,并且可以进行初始化,且没有public、private、protected等限制.
- property定义属性的类型可以是QML基本类型、也可以是QML对象类型,也可以是var泛型类型,而基本类型支持的有bool、double、int、list、real、string、url类型
- 自定义的属性默认会有个属性值改变信号,可以通过on<Property>Changed信号处理器来接受该信号。
示例如下所示:
Window{ visible: true property int cnt // 未初始化,cnt默认为0 property string label: "cnt" // 进行初始化 label = "cnt" Component.onCompleted: { console.log(label+","+cnt); cnt++; label = "count"; } onLabelChanged: { console.log("onLabelChanged:"+label) } onCntChanged: { console.log("onCntChanged:"+cnt) } }
运行打印:
qml: cnt,0 qml: onCntChanged:1 qml: onLabelChanged:count
2.基本类型数组属性自定义
基本类型数组属性自定义,则使用var泛型类型即可,示例如下所示:
Window{ visible: true property var strList : [ "str1", "str2", "str3" ] Component.onCompleted: { console.log(strList.length); for(var index in strList) { console.log(index+": "+strList[index]) } } }
如果我们要创建一个空数组,那么直接初始化赋值为[]即可,比如:
property var objArr: []
如果我们想定义二维数组,比如;
property var rotationModel: [ ["#00FF00", RotationAnimation.Numerical, 12], ["#FF0000", RotationAnimation.Clockwise, 12], ["#0000FF", RotationAnimation.Counterclockwise, 12], ["#00FFFF", RotationAnimation.Shortest, 12], ] MouseArea { id: area anchors.fill: parent onPressed: { console.log(rotationModel.length,rotationModel[0].length) // 打印4,3 表示有4行,每行里面有3列 } }
3. QML对象数组属性自定义
如果自定义一组对象数组,则使用list<Object>类型,示例如下所示:
Window{ visible: true property list<Rectangle> rectList : [ Rectangle{ id: list1; color:"#FF0000" }, Rectangle{ id: list2; color:"#FFFF00"}, Rectangle{ id: list3; color:"#FFFFFF"} ] Component.onCompleted: { console.log(rectList.length); for(var index in rectList) { console.log(index+": "+rectList[index].color) } } }
如果用var去存储QML对象数组,将会报错,因为var类型接受的array数组只能是基本类型,而Rectangle是个对象.
4.只读属性自定义
只读属性必须初始化,且不能修改,只需要在property前面加上readonly即可.
比如:
readonly property string type: "readonly"