前言
前一篇文章已经介绍了 QML 的基本类型,这里来介绍 QML 类型系统,包含了所有的在 QML 中可使用的类型。
可以再 QML 中使用的类型包含以下几种:
由 QML 语言提供的基本类型
从 C++中注册成 QML 可用的类型
由 QML 模块提供的类型
无论类型定义来自何处,引擎都将对属性和这些类型的实例强制执行类型安全检查。
基本类型
QML 语言内置支持各种基本类型,包含整型,浮点型,字符串以及布尔型等等,对象可以具有这些类型的属性,并且这些类型的值可以作为参数传递给对象的方法使用。
关于基本类型,前面已经介绍过,文章在这里
JavaScript类型
QML引擎支持JavaScript对象和数组。可以使用泛型var类型创建和存储任何标准JavaScript 类型。
例如,标准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对象的类型。例如,Rectangle是一种QML对象类型:它可用于创建Rectangle类型对象。这不能用诸如int和之类的原始类型来完成bool,它们用于保存简单数据类型而不是对象。
QML对象类型派生自QtObject,由QML模块提供。应用程序可以导入这些模块以使用它们提供的对象类型。该QtQuick模块提供了在QML中创建用户界面所需的最常用对象类型。
最后,每个QML文档都隐式定义了一个QML对象类型,可以在其他QML文档中重用。
从QML定义对象类型
通过QML文档定义对象类型
要创建对象类型,应将QML文档放入名为 .qml的文本文件中,其中是所需的类型名称。类型名称具有以下要求:
它必须由字母数字字符或下划线组成。
它必须以大写字母开头。
然后,该文档被引擎自动识别为QML类型的定义。此外,在解析QML类型名称时,以这种方式定义的类型会自动提供给引擎在直接目录中搜索的同一目录中的其他QML文件。
使用组件定义匿名类型
从QML中创建对象类型的另一种方法是使用Component类型。这允许在QML文档中内联定义类型,而不是在文件中使用单独的文档.qml。
Item {
id: root
width: 500; height: 500
Component {
id: myComponent
Rectangle { width: 100; height: 100; color: "red" }
}
Component.onCompleted: {
myComponent.createObject(root)
myComponent.createObject(root, {"x": 200})
}
}
这里的myComponent对象本质上定义了一个匿名类型,可以使用Component :: createObject实例化该匿名类型以创建此匿名类型的对象。
内联组件共享常规顶级组件的所有特征,并使用与import包含QML文档相同的列表。
从C ++定义对象类型
C ++插件编写者和应用程序开发人员可以通过Qt QML模块提供的API注册在C ++中定义的类型。存在各种注册功能,每个功能允许实现不同的用例。有关这些注册函数的详细信息,以及将自定义C ++类型公开给QML的详细信息,请参考这里。
https://blog.csdn.net/luoyayun361/article/details/80532594
https://blog.csdn.net/luoyayun361/article/details/80544906