QML支持许多基本类型。
基本类型就是引用单一值的类型,例如int、string。这与QML对象类型相对----引用了属性、信号、函数等的复合对象(参考class和int的区别)。与对象类型不同,基本类型不能用于声明QML对象,例如不能声明int{}或者size{}对象。
基本类型可被用于:
单个值(如,int一个简单的数字,var一个简单的列表)
一对简单属性值的值(如,size具有的width和height)
支持的基本类型
QML引擎默认支持一部分基本类型,这部分类型不需要import引入其他模块就能使用。其他的一些类型则需要导入提供它们的模块。
下列所有的基本类型都能在QML文件中用作属性类型,除了这几种情况:
list必须与QML对象类型一起使用。
枚举无法直接使用,因为枚举必须由已注册的QML对象类型定义。
QML提供的基本类型
下列是QML语言本身支持的基本类型:
bool 值为true/false
double 浮点数,双精度存储
enumeration 命名为枚举的值
int 整数,如0,10,-20
list QML对象列表
real 浮点数
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文件中导入这些模块。
基本类型的属性改变行为(Behanvior)
有些基本类型具有属性(property),例如,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
}
相反,对象类型的属性仅在属性被重设到不同的对象值时会发出它们自己的属性更改信号,并调用属性更改信号处理程序。