QML支持许多基本类型。
基本类型是指引用简单值的类型,如int或string。这与QML对象类型不同,QML对象类型引用具有属性、信号、方法等的对象。与对象类型不同,基本类型不能用于声明QML对象:例如,不可能声明int{}对象或size{}对象。
基本类型可用于指:
> 单个值(例如int指向单个数字,var指向单个项列表)
> 包含一组简单属性-值对的值(例如,size指具有宽度和高度属性的值)
当一个变量或属性持有一个基本类型并将其赋值给另一个变量或属性时,将生成该值的副本。在JavaScript中,这个值被称为原始值。
Supported Basic Types
引擎默认支持一些基本类型,不需要使用import语句,而其他类型则需要客户端导入提供它们的模块。下面列出的所有基本类型都可以用作QML文档中的属性类型,但有以下例外:
> list必须与QML对象类型结合使用
> 不能直接使用枚举,因为枚举必须由已注册的QML对象类型定义
Basic Types Provided By The QML Language
QML语言中本地支持的基本类型如下:
Binary true/false value | |
Number with a decimal point, stored in double precision | |
Named enumeration value | |
Whole number, e.g. 0, 10, or -20 | |
List of QML objects | |
Number with a decimal point | |
Free form text string | |
Resource locator | |
Generic property type |
Basic Types Provided By QML Modules
QML模块可以用更基本的类型扩展QML语言。例如,QtQuick模块提供的基本类型如下所示:
Date value | |
Value with x and y attributes | |
Value with x, y, width and height attributes | |
Value with width and height attributes |
Qt全局对象为操作基本类型的值提供了有用的函数。
目前只有由Qt提供的QML模块可以提供它们自己的基本类型,但是在Qt QML的未来版本中这可能会改变。为了使用特定QML模块提供的类型,客户端必须在其QML文档中导入该模块。
Property Change Behavior for Basic Types
一些基本类型有属性:例如,字体类型有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 }
相反,对象类型的属性会发出它们自己的属性更改信号,而对象类型属性的属性更改信号处理程序仅在将属性重新分配给不同的对象值时才会调用。