发布于 2018-04-21 23:19:18
在这文档中,他们将自定义对象称为组件。
组件是一个具有定义良好的接口的可重用类型,完全用QML构建。任何QML代码片段都可以通过将代码放置在".qml“文件中,其中是新的组件名称,以大写字母开头,从而成为组件。这些QML文件将自动作为新的QML 元素 (object)类型提供给同一目录中的其他QML组件和应用程序。
自定义对象类型和组件是相同的,但是象矩形这样的对象不是组件。每当您使用TypeName.qml文件创建自定义对象时,engin将TypeName.qml文档作为组件加载。
我们有两种组件:
在这文档中,他们说:
可以使用QML代码中的QQmlComponent组件或C++中的创建由文档定义的对象类型的实例。或者,如果对象类型显式地公开给具有特定类型名称的QML类型系统,则该类型可以直接用于其他文档中的对象声明。
因此,如果您创建一个自定义对象类型,您实际上创建了一个组件,反之亦然。
发布于 2018-04-21 15:36:05
“具有定义良好的接口的封装QML类型”的含义是什么?
对我来说,封装的部分意味着组件中包含的QML是自包含的,因此可以重用。定义良好的部分意味着只有在组件的根对象中定义的属性才能通过外部代码访问,类似于在protected和private关键字中使用C++的方式。
那么,QML组件和QML对象类型之间有什么区别呢?
我对文档的理解是,不能以相同的方式1实例化被声明为内联的组件。
Component {
id: myComponent
Text {
text: "Hello"
}
}您可以使用myComponent作为例如委托:
ListView {
// ...
delegate: myComponent
}但是不能使用它直接实例化它所代表的类型:
myComponent {
// ...
}这就是为什么需要将组件移动到自己的文件中( "QML对象类型“):
import QtQuick 2.0
Text {
text: "Hello"
}假设您将文件命名为MyType.qml,您可以直接实例化以下类型:
MyType {
text: "Some text"
}1从QT5.15开始,可以内联地实例化组件。一旦5.15发布,请参见本节。
https://stackoverflow.com/questions/49957150
复制相似问题