试图更好地理解 Item 的用法?

Posted

技术标签:

【中文标题】试图更好地理解 Item 的用法?【英文标题】:Trying to understand usage of Item a bit better? 【发布时间】:2014-08-30 00:18:03 【问题描述】:

我正在阅读有关 QML 的教程,在教程的第一部分使用 Rectangle 之后,他们已经开始使用 Item 作为他们创建的每个组件的基础。

问题是,color 似乎不是 Item 的有效属性。我不明白为什么。

然后,我从各个地方在线查看了一堆示例组件定义,它们似乎都使用Item 作为***类,然后紧随其后的是Rectangle。在Item 中包装Rectangle 有什么意义?为什么不直接使用Rectangle 作为***类?

【问题讨论】:

您应该将Item 视为所有其他组件的基类。所有其他 QtQuick 类型(目前除了 windows)都派生自 Item(C++ 端的 QQuickItem)。它没有color,因为它没有实现任何形状。一种未成型的物质。 【参考方案1】:

来自 Qt 文档:

对于创建组件(或显示一个简单的场景),有 可以用作***组件的不同元素。到 显示一个简单的场景,一个 Rectangle 作为顶层组件可以 够了。 Rectangle,FocusScope,Component,QtObject,Item,是一些 常用的元素作为***组件。

因此您可以将任何元素作为***组件。

请注意,QML 视觉项目如 RectangleTextEditImage、... 继承自 ItemItem 可用于将项目组合在一起。您可以使用Item 创建一个不可见的容器来容纳其他组件。所以它有利于处理孩子和处理焦点宽度和高度等属性。

我认为拥有Item 作为***组件就像拥有一个用于制作任意QML 组件的模板。当您的自定义组件被加载到另一个 QML 场景中时,该组件将保留***组件的属性。因此,您可以将像 Item 这样的通用和非可视元素作为***项目并公开任意属性。

【讨论】:

【参考方案2】:

您可以将 Item 视为一个非可视的 Rectangle,它更容易和更快地让系统绘制,因为没有任何东西可以绘制。使用 Item 还是 Rectangle 作为***元素并没有太大的区别 - 不使用超出您需要的资源是一种很好的编程习惯。

如果您在某个时候开始创建自己的非视觉元素,您会更喜欢 Item。

【讨论】:

最后一句话结束了。

以上是关于试图更好地理解 Item 的用法?的主要内容,如果未能解决你的问题,请参考以下文章

jdk8中的stream的用法之filter

试图更好地理解 VITERBI 算法

了解 URL 符号和用法

SwiftUI ForEach 理解变量用法

试图更好地理解 Chrome 和 Firefox 之间的跨域处理差异

chars eof啥用