C++学习(一四七)QML中的property

编程入门 行业动态 更新时间:2024-10-08 08:33:35

C++学习(一四七)<a href=https://www.elefans.com/category/jswz/34/1742664.html style=QML中的property"/>

C++学习(一四七)QML中的property

在QML文件中我们可自定义属性,语法如下:

property <propertyType> <propertyName> [ : <value> ]  

类似于成员变量,不同的是可以初始化,并且没有public、private、protected等限制。

自定义属性完成后会自动为这个属性创建一个属性值改变的信号和相应的信号处理器on****Changed,首字母大写,如下所示:

Rectangle {  id: root  property string someText  onSomeTextChanged: console.log("The someText will be: " + someText)  width: 800; height: 480  color: "lightblue"  MouseArea {  anchors.fill: parent  onClicked: someText = "click"  }  
}  

properName以一个小写字母开头,只能包括字母、数字和下划线。propertyType可以是QML基本类型,enumeration以int来代替,也可以是QML对象类型,神奇的var类型是返型的,支持任何类型的属性值,如下所示:

Item {  property int theNumber  property string theString  property url theUrl  property Item someItem  property Rectangle someRectangle  property var someNumber: 1.5  property var someString: "abc"  property var someBool: true  property var someList: [1, 2, "three", "four"]  property var someObject: Rectangle { width: 100; height: 100; color: "red" }  
}  

属性值可以被初始化,也可以使用JavaScript表达式来赋值,通过这两种方式赋值时,可以是一个静态值,也可以是一个与其它属性绑定的值。 

Rectangle {  id: rootRect  property color theColor: "green"  property color previousColor: rootRect.color  property color nextColor  width: 100; height: 100  color: "red"  Component.onCompleted: {  rootRect.nextColor = rootRect.color  console.log(theColor, previousColor, nextColor, rootRect.color)  }  
} 

 

QtObject {id: rootproperty QtObject viewer: MainView{}}

属性分为以下几类:

1、自定义属性

property <propertyType> <propertyName> [ : <value> ]  

2、列表属性

 

Item {  children: [  Text { text: "textOne" },  Text { text: "textTwo" },  Text { text: "textThree" }  ]  Component.onCompleted: {  for(var i = 0; i < children.length; i++)  console.log("text of lable", i, ":", children[i].text)  }  
}  

上面例子中的children属性就是一个列表属性,包含在一对方括号中,里面的元素必须是QML对象类型而不能是QML基本类型,并以逗号分隔。列表内的元素可通过数组下标[index]访问,元素个数由length属性提供。若列表内只有一个元素,方括号可省略。

自定义列表属性,代码如下:

Item {  property list<Rectangle> siblingRects  property list<Rectangle> childRects: [  Rectangle { color: "red" },  Rectangle { color: "green" },  Rectangle { color: "blue"}  ]  Component.onCompleted: {  for(var i = 0; i < childRects.length; i++)  console.log("color of lable", i, ":", childRects[i].color)  }  
}  

3、分组属性

在某些情况下,属性可以是由若干个子属性构成的一个逻辑组,我们可以用“.”符号或者分组符号对其进行赋值。

Text {  //dot notation  font.pixelSize: 12  font.bold: true  }  Text {  //group notation  font { pixelSize: 12; bold: true }  }  

4、属性别名

属性别名引用其它的属性,语法如下:

[default] property alias <name>: <alias reference>  

5、默认属性

任何基于Item的类型都有一个data列表属性,这个属性就是该类型的默认属性,保存了所有的孩子对象,其中可视的孩子对象又保存在了children列表属性中,不可视的孩子对象保存在了resources列表属性中,在添加子对象时children、resources属性可写可不写,都会自动添加到对应的属性列表中。

6、只读属性

readonly property <propertyType> <propertyName> : <initialValue>

只读属性必须初始化,且不能修改,也不能是default属性和alias属性

7、附加属性

QML语言还包括了一些附加属性和信号处理器,由相应的附加类型提供,使用语法如下:

<AttachingType>.<propertyName>  
<AttachingType>.on<SignalName> 

 

 

更多推荐

C++学习(一四七)QML中的property

本文发布于:2024-02-06 09:45:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1747915.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:一四七   QML   property

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!