QML类型系统 综述
一、概述
在QML文档中定义对象层次结构时可能使用的类型可以来自各种来源。它们可能是:
- 由QML语言本地提供
- 通过QML模块通过c++注册
- QML模块作为QML文档提供
此外,应用程序开发人员可以通过直接注册c++类型或在QML文档中定义可重用组件来提供他们自己的类型,也就是自定义的类型,在c++,或者Qml 里面都可以定义,就像C++ 可以自定义结构体类型那种功能。
无论类型定义来自何处,qml 引擎都将对这些类型的属性和实例强制执行类型安全。
二、基本类型
QML语言内置了对各种基本类型的支持,包括整数、双精度浮点数、字符串和布尔值。对象可以具有这些类型的属性,这些类型的值可以作为参数传递给对象的方法。就比如那种这个帮助文档一看,你就知道这些属性参数值是什么类型的,毕竟 qml 是对强类型语言的。
有关基本类型的更多信息,请参阅QML基本类型文档。
三、JavaScript类型
QML引擎支持JavaScript对象和数组。任何标准的JavaScript类型都可以使用泛型var类型来创建和存储。
例如,标准的Date和Array类型可用,如下所示:
import QtQuick 2.0
Item {
property var theArray: []
property var theDate: new Date()
Component.onCompleted: {
for (var i = 0; i < 10; i++)
theArray.push("Item " + i)
console.log("There are", theArray.length, "items in the array")
console.log("The time is", theDate.toUTCString())
}
}
四、QML对象类型
QML对象类型是一种可以实例化QML对象的类型。QML对象类型派生自 QtObject,由QML模块提供。应用程序可以导入这些模块以使用它们提供的对象类型。QtQuick模块提供了在QML中创建用户界面所需的最常见的对象类型。
最后,每个QML文档都隐式地定义了一个QML对象类型,可以在其他QML文档中重用。这个与自定义模块、控件都有很大关系的,请参阅QML类型系统中关于对象类型的文档。
就像下面这类型,画圈的 Transition 一看就是对象类型。