日志
QML中Default 属性学习
2016-07-10 12:09
Default 属性 在学习QML的过程中很容易忽略Default属性,因为这个概念很少有人捋它。但是,明白Default属性是很重要的。 首先先看一下在QML中的,一个完整属性的定义形式如下: [default]property <propertyType> <propertyName> default这个关键词是可以理解为默认属性,它被中括号括起来,说明是一个可选属性。由于它是QML中属性定义的一般形式,也体现为任何属性都可以定义为默认属性。(但是在一个QML对象中只能定义一个默认属性)。 默认属性的解释说明: 一个QML对象中仅能定义一个default(默认)属性。一个对象的默认属性,会将定义在定义在其中的对象自动分配给默认属性。 default 关键词将一个属性声明为一个默认属性. 例如, 一个文件名为MyLabel.qml的QML文档,声明了一个默认属性 someText: //MyLabel.qml import QtQuick2.0 Text { defaultproperty var someText text:"Hello, " + someText.text } 一个定义在MyLabel的对象,将自动将值分配给someText 属性, 例如: MyLabel{ Text {text: "world!" } } 直接分配属性也是一样的效果: MyLabel{ someText:Text { text: "world!" } } 例如:Item中的data属性 [default]data :list<Object> 它就是默认属性,因此直接在其中创建的对象会被自动分配给data属性。 由于default默认属性只能有一个,因此当在Item中声明一个新的default属性时,原来的default属性就是对外不可见了,但是这个属性还是存在的。 例如在如下例子,虽然单独的Text的默认属性也是data,但是在MyLabel.qml中的Text中定义了someText默认属性,因此说是在使用组件时,data默认属性就对外不可显示了,但是data属性还是存在并起作用的。 // MyLabel.qml import QtQuick 2.0 Text { id:root default property var someText text: "Hello, " + someText.text Rectangle{ id:rec1 anchors.fill: parent color: "red" } } 再比如属性 Gradient 类型的只有一个属性 [default] stops : list<GradientStop> 是个默认属性,默认属性的类型是list<GradientStop>,因此在Gradient中只能声明GradientStop类型,否则会类型不匹配。 使用形式是: Gradient { GradientStop { position: 0.0; color: "red" } GradientStop { position: 0.33; color: "yellow" } GradientStop { position: 1.0; color: "green" } } 如果加入其它类型就会报错。 |
下一篇: 无
上一篇: 无