QML基础五:QML对象类型介绍
程序员文章站
2024-01-02 11:08:16
...
引言
用了N年的QWidget,因为项目需求而开始学习QML做一些动态的界面,下面开始记录学习QML的新路历程。
注:学习有误的望指点一二,不喜勿喷!!!
QML对象类型
用语法术语来说,QML对象类型是一种可以用来声明对象的方法,方法是指定类型每次,后跟一组包含该对象属性的花括号。这与基本类型不同,基本类型不能以该方式使用。
例如:Rectangle是QML对象类型,可用于创建Rectangle类型的对象。像int和bool这种基本类型只能保持简单的数据类型,而不是对象。
定义QML对象类型
通过QML文档定义对象类型
开发人员通过创建QML文件来定义一个新的对象类型,该类型由文件名标识(不带文件扩展名)。
例如:一个文件名为Button.qml的文件,它对应的类型为Button,该定义可以在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实例化该匿名类型以创建对象。
请注意,每个Component对象声明都会创建自己的组件范围。在Component对象声明中使用和引用的任何id值在该范围内必须是唯一的,但在声明内联组件的文档中不必唯一。因此,在myComponent对象声明中声明的Rectangle可以使用root作为id值,而不会与同一文档中为Item对象声明的root冲突,因为这两个id值是在不同的组件范围声明的。
通过C++定义对象类型
详细请看下一章