QML中的属性别名详解
QML中的属性别名类似C++的引用,与普通的属性定义有所不同,属性别名不需要分配新的存储空间,而是将新声明的属性(称为别名属性)作为一个已经存在的属性(被别名的属性)的直接引用,换句话说,我们给已经存在的属性定义一个别名,以后再次使用这个属性的时候便可以通过这个属性别名来访问它了。属性别名的声明与属性的声明类似,但是需要使用alias关键字代替属性类型,并且在属性声明的右侧必须是一个有效的别名引用。语法如下所示:
property alias<name> : <alias reference>
与普通属性不同的是,别名属性只能引用到其声明处类型作用域中的一个对象或一个对象的属性,它不能包含任何JavaScript表达式,也不能引用类型作用域之外的对象。另外当第一次声明别名时,alias reference必须提供,这一点与C++中的引用也非常的类似。
在使用属性别名时,需要注意下面两点:
(1).属性别名在整个组件初始化完毕之后才是可用的:代码是从上向下执行的,因此一个比较常见的错误是,在引用所指向的属性还没初始化的时候就使用了别名。
(2).别名不能使用在同一个组件中声明的另一个别名。
(3).属性别名可以与现有的属性同名,但会覆盖现有属性。
如下面实例所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import QtQuick 2.3 import QtQuick.Controls 1.2 ApplicationWindow { visible: true width: 640 height: 480 title: qsTr( "QML语法" ) Rectangle{ id:coloredRectangle property alias color: blueRectangle.color color: "red" Rectangle{ id:blueRectangle color: "#1234ff" } Component.onCompleted:{ console.log(coloredRectangle.color) setInternalColor() console.log(coloredRectangle.color) coloredRectangle.color = "#884646" console.log(coloredRectangle.color) } //内部函数访问内部属性 function setInternalColor(){ color = "#111111" } } } |
打印结果:
代码中Rectangle中声明了一个color别名属性,它的名称与内建的Rectangle:color属性相同,使用该组件的任何对象引用color属性时(例如代码中的coloredRectangle.color)都是使用的别名,而不是一般的Rectangle:color属性,但是在组件内部直接使用color属性时,引用的是真实定义的属性,而不是别名。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?