29

ComponentQML和Itemin QML有什么区别?这里的文档不是很清楚。用作多个小部件的容器的首选类型是什么?可以换Rectangle吗?

例如,以下声明有什么区别:

Item {
    id: itemWidget

    Rectangle { id: one }
    Rectangle { id: two }
}

Component {
    id: componentWidget

    Rectangle { id: one }
    Rectangle { id: two }
}

为什么我们通常Component在声明 a 时使用delegate

4

2 回答 2

19

这两个片段之间的区别在于Rectangle将立即显示。这写在文档中:

请注意,虽然 Rectangle 本身会自动渲染和显示,但上述矩形不是这种情况,因为它是在 Component 中定义的。该组件将 QML 类型封装在其中,就好像它们是在单独的 QML 文件中定义的一样,并且在请求之前不会加载(在这种情况下,由两个 Loader 对象)。因为 Component 不是从 Item 派生的,所以您不能将任何东西锚定到它。

声明委托时Component使用 ,因为必须创建多个委托项。在这里单行Item不行。您可以将其Component视为可以从中创建对象的模板。

于 2015-08-05T11:32:24.837 回答
5

AComponent在 QML 中既是一个概念,也是一个事物。AnItem是 QtQuick 模块中定义的可视化事物,可在 QML 中使用。这两件事在概念上是不同的。

作为 QML 概念,所有可重用的东西都称为组件。您可以通过多种方式定义组件,但一种简单的方法是创建一个.qml文件并在命名组件时对其进行命名。即:Button.qml 或 Switch.qml。当 QML 引擎加载该文件时,您可以将其用作按钮或开关。

定义组件的另一种方法是Component {}.qml文件中使用。这允许您定义一个新的组件inline由加载器显式加载后,内联定义的组件不起作用。

Item另一方面,An是 QtQuick 模块中定义的简单类型。

我认为调用Itema是可以的,Component即使 anItem在技术上不是继承自Component. 或者更准确地说,您可以说您的自定义组件基于Itemif 您的.qmlhasItem作为根类型。

于 2016-03-13T10:15:28.497 回答