前言
QML 有许多基本类型,例如整型int或字符串类型string,这和 QML 对象类型形成对比,QML 对象类型是指具有属性、信号、方法等的对象,与对象类型不同的是,基本类型不能用于声明 QML 对象,例如不能声明 int{}对象或size{}对象。
基本类型可用于定义:
单个值(例如,int 表示单个数字,var 可以指单个项目列表)
包含一组简单的属性值对(例如size 包含 width 和 height 两个简单的键值)
支持的基本类型
默认情况下,引擎支持一些基本类型, 并且不需要使用 import 语句,导入模块,而其他类型则需要客户端导入模块才能使用。下面列出所有基本类型都可以用 property 直接来声明的类型,但以下情况除外:
list 必须与 QML 对象类型一起使用
enumeration 不能直接使用,因为枚举必须由注册的 QML 对象类型定义
QML 语言提供的基本类型
下面列出了 QML 语言本身支持的基本类型:
bool | 布尔值 true/false |
---|---|
double | 双精度数字类型 |
enumeration | 枚举 |
int | 整型 |
list | QML 对象列表 |
real | 实型(C++中 float) |
string | 字符串类型 |
url | 资源定位器 |
var | 通用属性类型 |
QML 模块提供的基本类型
QML 模块可以使用更基本的类型扩展 QML 语言,例如:QtQuick 模块提供的基本类型如下所示:
Date | 日期值 |
---|---|
point | 具有 x 和 y 属性坐标值 |
rect | 具有 x,y,width,height属性的值 |
size | 具有 width 和 height 属性的值 |
在 Qt 的全局对象提供有用的功能,用于操作基本类型的值。
目前只有 Qt 提供的 QML 模块可以提供它们自己的基本类型,但是在 Qt QML 的未来板块中可能会改变。为了使用特定 QML 模块提供的类型,客户端必须在其 QML 文档中导入该模块。
基本类型的属性变更行为
一些基本类型具有属性,例如 font类型具有pixelSize,family和bold特性。与对象类型的属性不同,基本类型的属性不提供它们自己的属性更改信号。只能为基本类型属性本身创建属性更改信号处理程序:
Text {
// 这样写无效
onFont.pixelSizeChanged: doSomething()
// 这样也是无效
font {
onPixelSizeChanged: doSomething()
}
// 这样就可以
onFontChanged: doSomething()
}
但是,请注意,只要其任何属性发生更改,以及属性本身发生更改时,就会发出基本类型的属性更改信号。请使用以下代码,例如:
Text {
onFontChanged: console.log("font changed")
Text { id: otherText }
focus: true
//更改任何字体属性,或者将属性
// 重新分配给不同的字体值,将调用onFontChanged处理程序Keys
Keys.onDigit1Pressed: font.pixelSize += 1
Keys.onDigit2Pressed: font.b = !font.b
Keys.onDigit3Pressed: font = otherText.font
}
相反,对象类型的属性发出它们自己的属性更改信号,并且仅在将属性重新分配给不同的对象值时才调用对象类型属性的属性更改信号处理程序。这两者是有区别的。