QML 值类型
QML 支持内置和自定义值类型。
值类型在概念上是通过值而不是通过引用传递的,如int
或string
。这与QML 对象类型(Object Types)不同。对象类型是通过引用传递的。如果你把对象类型的实例分配给两个不同的属性,两个属性都会带有相同的值。修改对象会反映在两个属性中。如果将一个值类型的实例分配给两个不同的属性,则这两个属性会分别携带不同的值。如果修改其中一个属性,另一个属性将保持不变。值类型只是在概念上通过值进行传递,因为必须仍能像 JavaScript 对象一样与它们进行交互。为方便起见,在现实中,当你从 JavaScript 代码中访问值类型时,它们是作为值类型引用传递的。
与对象类型不同,值类型不能用于声明 QML 对象:例如,不能声明int{}
对象或size{}
对象。
值类型可用于指代
当一个变量或属性持有一个值类型,并将其分配给另一个变量或属性时,就形成了该值的副本。
可用的值类型
引擎默认支持某些值类型,使用时不需要导入语句,而其他值类型则需要客户端导入提供这些值类型的模块。下面列出的所有值类型都可以在 QML 文档中用作property
类型,但以下情况除外:
void
, 表示没有值list
必须与对象或值类型一起作为元素使用。
QML 语言提供的内置值类型
QML 语言本地支持的内置值类型如下:
二进制真/假值 | |
日期值 | |
带小数点的数字,双精度存储 | |
整数,如 0、10 或 -20 | |
QML 对象列表 | |
带小数点的数字 | |
自由格式文本字符串 | |
资源定位器 | |
通用属性类型 | |
通用属性类型 | |
空值类型 |
QML 模块提供的值类型
QML 模块可以用更多值类型扩展 QML 语言。
例如,QtQml
模块提供的值类型有
QtQuick
模块提供的值类型有
ARGB 颜色值 | |
具有 QFont 属性的字体值。 字体类型指的是具有 QFont 属性的字体值。 | |
matrix4x4 类型是一个 4 行 4 列的矩阵 | |
四元数类型具有标量、x、y 和 z 属性 | |
向量 2d 类型具有 x 和 y 属性 | |
具有 x、y 和 z 属性的值 | |
向量 4d 类型具有 x、y、z 和 w 属性 |
Qt 全局对象为操作值类型的值提供了useful functions 。 Qt Qml和 Qt Quick模块的值类型。
其他 Qt 模块将在各自的模块页面上记录其值类型。
您可以定义自己的值类型,如《从 C++ 定义 QML 类型》(Defining QML Types from C++)一文所述。要使用特定 QML 模块提供的类型,客户端必须在 QML 文档中导入该模块。
值类型的属性更改行为
有些值类型有属性:例如,font 类型有pixelSize
,family
和bold
属性。与对象类型的属性不同,值类型的属性不提供自己的属性更改信号。只能为值类型属性本身创建一个属性更改信号处理程序:
Text { // invalid! onFont.pixelSizeChanged: doSomething() // also invalid! font { onPixelSizeChanged: doSomething() } // but this is ok onFontChanged: doSomething() }
但要注意的是,只要值类型的任何属性发生变化,以及属性本身发生变化,就会发出属性变化信号。以下面的代码为例:
Text { onFontChanged: console.log("font changed") Text { id: otherText } focus: true // changing any of the font attributes, or reassigning the property // to a different font value, will invoke the onFontChanged handler Keys.onDigit1Pressed: font.pixelSize += 1 Keys.onDigit2Pressed: font.b = !font.b Keys.onDigit3Pressed: font = otherText.font }
与此相反,对象类型的属性会发出自己的属性变化信号,对象类型属性的属性变化信号处理程序只有在属性被重新分配给不同的对象值时才会被调用。
另请参阅 QML 类型系统。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.