首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QML组件和QML对象类型有什么区别?

QML组件和QML对象类型有什么区别?
EN

Stack Overflow用户
提问于 2018-04-21 15:10:10
回答 2查看 1.3K关注 0票数 2

Qt氏病说:

组件是具有定义良好的接口的可重用、封装的QML类型. 组件通常由组件文件(即.qml文件)定义。组件类型基本上允许在QML文档中内联定义QML组件,而不是作为单独的QML文件定义。

“具有定义良好的接口的封装QML类型”的含义是什么?

同样,在定义一个新的QML对象类型时,我们可以从Qt氏病中获得:

要创建对象类型,应该将QML文档放在名为TypeName.qml的文本文件中,其中TypeName是所需的类型名称。

那么,QML组件和QML对象类型之间有什么区别呢?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-04-21 23:19:18

文档中,他们将自定义对象称为组件。

组件是一个具有定义良好的接口的可重用类型,完全用QML构建。任何QML代码片段都可以通过将代码放置在".qml“文件中,其中是新的组件名称,以大写字母开头,从而成为组件。这些QML文件将自动作为新的QML 元素 (object)类型提供给同一目录中的其他QML组件和应用程序。

自定义对象类型和组件是相同的,但是象矩形这样的对象不是组件。每当您使用TypeName.qml文件创建自定义对象时,engin将TypeName.qml文档作为组件加载。

我们有两种组件:

  1. 由组件文件(即.qml文件)定义。因此,可以说这种组件与qml文档是相同的。
  2. 组件类型基本上允许在QML文档中内联定义QML组件,而不是作为单独的QML文件定义。

文档中,他们说:

可以使用QML代码中的QQmlComponent组件或C++中的创建由文档定义的对象类型的实例。或者,如果对象类型显式地公开给具有特定类型名称的QML类型系统,则该类型可以直接用于其他文档中的对象声明。

因此,如果您创建一个自定义对象类型,您实际上创建了一个组件,反之亦然。

票数 3
EN

Stack Overflow用户

发布于 2018-04-21 15:36:05

“具有定义良好的接口的封装QML类型”的含义是什么?

对我来说,封装的部分意味着组件中包含的QML是自包含的,因此可以重用。定义良好的部分意味着只有在组件的根对象中定义的属性才能通过外部代码访问,类似于在protectedprivate关键字中使用C++的方式。

那么,QML组件和QML对象类型之间有什么区别呢?

我对文档的理解是,不能以相同的方式1实例化被声明为内联的组件。

代码语言:javascript
复制
Component {
    id: myComponent

    Text {
        text: "Hello"
    }
}

您可以使用myComponent作为例如委托:

代码语言:javascript
复制
ListView {
    // ...
    delegate: myComponent
}

但是不能使用它直接实例化它所代表的类型:

代码语言:javascript
复制
myComponent {
    // ...
}

这就是为什么需要将组件移动到自己的文件中( "QML对象类型“):

代码语言:javascript
复制
import QtQuick 2.0

Text {
    text: "Hello"
}

假设您将文件命名为MyType.qml,您可以直接实例化以下类型:

代码语言:javascript
复制
MyType {
    text: "Some text"
}

1从QT5.15开始,可以内联地实例化组件。一旦5.15发布,请参见本节

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49957150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档