一、QML 属性的类型
在 QML(Qt Modeling Language)中,属性(Property) 是 UI 元素或自定义组件中用来存储和绑定数据的核心机制。属性不仅能设置值,还能与其他属性进行绑定(Binding),实现响应式编程。
QML 支持各种类型的属性,包括:
- 基本类型:int, double, string, bool, color, url, date, time, rect, point, size
- 枚举类型:如 Text.AlignHCenter
- 对象类型:如 Item, Rectangle, Image 等
- 自定义类型:可在自定义 QML 中声明
二、自带属性的声明和使用
2.1 直接使用组件自带属性
Rectangle {
width: 200
height: 100
color: "lightblue"
}
以上是 Rectangle 的标准属性,设置了其宽、高、颜色。
2.2 绑定属性
属性值可以绑定另一个属性,实现自动更新:
Rectangle {
width: 200
height: width / 2 // 绑定到 width,width 改变,height 自动变化
}
2.3 属性变更信号(on<Property>Changed)
属性改变时可以响应:
Rectangle {
width: 200
onWidthChanged: console.log("Width changed to", width)
}
2.4 使用 alias 暴露属性
alias 属性可以让内部组件的属性向外部暴露:
// MyItem.qml
Item {
property alias text: label.text
Text {
id: label
text: "Default"
}
}
2.5 使用 property var 存储任意值:
Item {
property var something: [1, 2, 3] // 可以是数组、对象、函数等
}
var 类型在动态结构中非常灵活,适合用于复杂结构或跨类型变量。
2.6 只读属性(readonly)
QML 没有显式的 readonly 关键字,但可以通过 QtObject + 信号机制封装只读属性:
QtObject {
readonly property int statusCode: 200 // 实际上不可变(通过不暴露 setter)
}
或者使用 _ 命名约定保护内部属性:
Item {
property int _internalCount: 0 // 不建议外部使用

最低0.47元/天 解锁文章
2820

被折叠的 条评论
为什么被折叠?



