QML Basic Types

QML支持多种基本类型。

基本类型是指一个简单值,例如intstring这与QML对象类型形成对比,它指的是具有属性,信号,方法等的对象。与对象类型不同,基本类型不能用于声明QML对象:例如,不可能声明一个int {}对象或size {}对象。

基本类型可用于指代:

  • 单个值(例如int是指单个数字,var可以指单个项目列表)
  • 包含一组简单属性 - 值对的值(例如,size是指具有宽度高度属性的值)

支持的基本类型

默认情况下,引擎支持一些基本类型,并且不需要使用import语句,而其他基本类型则需要客户端导入提供它们的模块。下面列出的所有基本类型都可以用作QML文档中的属性类型,但以下情况除外:

  • list必须与QML对象类型结合使用
  • enumeration不能直接使用,因为枚举必须由注册的QML对象类型定义

QML语言提供的基本类型

在QML语言中原生支持的基本类型如下:

bool

二进制真/假值

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

带宽和高度属性的值

Qt全局对象提供了用于操作基本类型的值的有用函数。

目前只有Qt提供的QML模块可以提供它们自己的基本类型,然而这在未来的Qt QML版本中可能会改变。为了使用由特定QML模块提供的类型,客户端必须在QML文档中导入该模块。

基本类型的属性更改行为

一些基本类型具有属性:例如,font类型具有pixelSizefamilybold属性。对象类型的属性不同,基本类型的属性不提供自己的属性更改信号。只能为基本类型属性本身创建属性更改信号处理程序:


  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类型系统