以下内容为本人的学习笔记,如需要转载,请声明原文链接 [englyf] https://www.jianshu.com/p/fd302877825a
每个 QML 对象类型都有一组已定义的属性。每个对象类型的实例被创建时,都会带有一组已定义的该对象类型的属性。下面列出来了几种可以指定的不同种类属性。
对象声明中的属性
QML 文件中的 对象声明 定义了一个新类型。也同样声明了一组对象层次结构,当新定义类型被实例化时,这组结构也会被实例化。
QML 对象类型的属性类型集合如下所示:
- id 属性
- 「属性」属性
- 信号属性
- 信号处理程序属性
- 方法属性
- 附加类型属性和附加信号处理程序属性
- 枚举属性
下面将详细介绍这些属性类型。
id 属性
每个 QML 文档有且只有一个 id 属性。这个属性是由语言自身提供,不能通过任何的对象类型来重新定义或者重写。
如果其它对象需要标识或者引用一个对象,那么必须先对这个被标识或者被引用对象的 id 属性进行赋值。这个 id 的值只能是以小写字母或者下划线 “_” 开头,并且不能包含字母、数字和下划线之外的任何字符。
下面的示例代码中包含了 TextInput 对象和 Text 对象。对象 TextInput 的 id 被设为 「myTextInput」。通过引用 myTextInput.text,Text 的属性 text 的值将和 TextInput 的属性 text 的值保持一致。可以看到两个控件显示相同的文字:
import QtQuick 2.0
Column {
width: 200; height: 200
TextInput { id: myTextInput; text: "Hello World" }
Text { text: myTextInput.text }
}
在对象声明的组件范围内,都可以通过对象的 id 引用该对象。所以,在组件范围内,id 的值必须是唯一的。更多的细节可以点击 范围和命名解决方案
一旦对象的实例被创建后,属性 id 的值就不能改动了。其实 id 不是普通的属性,并且具有特殊的语义,比如上面的实例代码中,不可以通过 myTextInput.id 来访问。
「属性」属性
对象的「属性」属性是能被赋静态值或者绑定动态表达式的属性。这个属性值可以被其它对象读取。通常它也可以被其它对象修改,除非这个属性所属的 QML 类型明确禁止。
定义「属性」属性
已通过注册类的 Q_PROPERTY 的类型会被 QML 类型系统注册,所以可以被用来定义「属性」属性。此外,在 QML 文档的对象声明中,可以按照以下的语法来定义一个对象类型的自定义属性:
[default] property <propertyType> <propertyName>
通过上面的方式,可以将特定值暴露给外部对象或者更容易地维护内部状态。
属性名字必须以小写字母开头,而且只能包含字母、数字和下划线。JavaScript 保留字 不能再用作属性名。关键字 default 是可选的,如果使用了这个关键字,则会改变被声明的属性含义。
参考英文资料[Qt]https://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html
网友评论