我正在为我的项目使用QML,我想知道是否在另一个文件中实例化文件,是否像为c ++类实例化对象?
File.qml
Rectangle {
id: idRect1
.
.
}
File2.qml
Rectangle {
id: idRect2
File1 {
id:idFile1
.
.
}
}
在File2.qml中我初始化了File1,这是否意味着我创建了一个File1类型的对象?请分享一些关于所有这些机制如何工作的知识(链接)。在此先感谢
答案 0 :(得分:2)
在QML中创建首字母大写的文件时,您需要创建一个组件。组件使用OOP聚合(而不是子类化)实现。这意味着如果我写
// MyButton.qml
import QtQuick 2.0;
Rectangle {
id: base;
width: 120;
height: 40;
color: "lightgray";
Text {
text: "foobar";
anchors.centerIn: parent;
}
}
...我还没有子类化Rectangle,我只是创建了一个包含Rectangle作为根对象的组件,并以某种方式对其进行配置,并在其中添加了一个Text对象。
只要创建了一个组件,就可以通过简单地编写它来实现:
MyComponent { id: myNewInstance; }
因为这是QML的一种方式。
组件名称是一种类(但不是用C ++或JS方式来定义它),它也可以用作属性的类型:
property MyComponent theComponent : myNewInstance;
然后它可以保存使用给定组件创建的对象的ID,有点像C / C ++指针:该属性包含指向实际对象的链接。
但是由于QML的设计方式,即使它比子类更加聚合,自定义组件的根对象类型的属性也可以包含派生组件的ID,在我的情况下:
property Rectangle theComponent : myNewInstance;
可行,但如果我尝试将图像或文本的ID或其他东西放入,QML引擎会抛出不兼容的类型错误。
我希望它可以帮到你。