QML 支持许多基本类型。
基本类型是指一个简单值的类型,例如 int 或 string。 这与 QML 对象类型形成对比,后者指的是具有属性、信号、方法等的对象。 与对象类型不同,基本类型不能用于声明 QML 对象:例如,无法声明 int{} 对象或 size{} 对象。
基本类型可以用来指:
- 单个值(例如 int 指单个数字,var 可以指单个项目列表)
- 包含一组简单的属性值对的值(例如,大小是指具有宽度和高度属性的值)
当一个变量或属性持有一个基本类型并将其分配给另一个变量或属性时,就会生成该值的副本。 在 JavaScript 中,这个值被称为原始值。
一、支持的基本类型
引擎默认支持一些基本类型,不需要使用 import 语句,而另一些则需要导入提供它们的模块。 下面列出的所有基本类型都可以用作 QML 文档中的属性类型,但以下情况除外:
- list 必须与 QML 对象类型结合使用
- enumeration 不能直接使用,因为枚举必须由注册的 QML 对象类型定义
1.1、QML 语言提供的基本类型
QML 语言中原生支持的基本类型:
- bool
- double:带小数点的数字,以双精度存储
- enumeration:命名枚举值
- int
- list:QML 对象列表
- real:带小数点的数字
- string
- url:资源定位器
- var:通用属性类型
1.2、QML 模块提供的基本类型
QML 模块可以使用更多基本类型扩展 QML 语言。 例如QtQuick模块提供的基本类型如下:
- color
- date
- font
- point
- quaternion
- rect
- size
- vector2d
- vector3d
- vector4d
Qt 全局对象为操作基本类型的值提供了有用的函数。
二、基本类型的属性更改行为
一些基本类型具有属性:例如,字体类型具有 pixelSize、family 和 bold 属性。 与对象类型的属性不同,基本类型的属性不提供自己的属性变化信号。只能为基本类型属性本身创建属性更改信号处理程序:
Text
{
// 无效的
onFont.pixelSizeChanged: doSomething()
// 无效的
font
{
onPixelSizeChanged: doSomething()
}
// 有效的
onFontChanged: doSomething()
}
但是,只要基本类型的任何属性发生更改,以及属性本身发生更改,就会发出基本类型的属性更改信号。以下面的代码为例:
Text
{
onFontChanged: console.log("font changed")
Text { id: otherText }
focus: true
// 更改任何字体属性,或重新分配属性
Keys.onDigit1Pressed: font.pixelSize += 1
Keys.onDigit2Pressed: font.b = !font.b
Keys.onDigit3Pressed: font = otherText.font
}