C
概念 - 视觉父元素
视觉父元素
在 Qt Quick Ultralite 中创建视觉场景时,理解 视觉父元素 的概念至关重要。
Qt Quick Ultralite 中的视觉父元素概念与 QObject 父元素层次结构内的 对象父元素 概念是分开的,但相关。所有 QML 对象都有一个 对象父元素,由对象声明的 对象层次结构 决定。在工作与 QtQuick
模块时,Item 类型是该模块提供的所有视觉项的基本类型,并且它提供了由项的 parent 属性定义的额外 视觉父元素 概念。每个项都有一个视觉父元素。
声明的项作为另一个项的子项,并不自动意味着子项将适当地定位或调整大小以适应其父元素。某些 QML 类型可能有内置的行为,影响子项的定位——例如,一个 Row 对象会自动将其子项重新定位成水平排列——但这是由类型的特定实现强制的。此外,父元素不会自动裁剪其子项以在视觉上将其包含在父元素的视觉边界内,除非其 clip 属性设置为 true。
注意:请记住,Qt Quick Ultralite 将 parent 属性实现为只读。这意味着任何更改项视觉父元素的 Qt Quick 代码在 Qt Quick Ultralite 中将无法编译。
项坐标
由于项坐标是相对于视觉父元素,因此它们可能会受到视觉层次结构更改的影响。有关更多信息,请参阅 视觉坐标 概念页面。
堆叠顺序
Qt Quick Ultralite 项使用递归绘图算法来确定在发生冲突时哪些项被绘制在顶部。通常,项会按照它们创建的顺序(或在 QML 文件中指定)绘制在父项之上。因此,在以下示例中,蓝色矩形将绘制在绿色矩形之上
Rectangle { color: "#272822" width: 320 height: 480 Rectangle { y: 64 width: 256 height: 256 color: "green" } Rectangle { x: 64 y: 172 width: 256 height: 256 color: "blue" } }
由于算法会递归遍历视觉项层次结构,绿色矩形的任何子项也将绘制在蓝色矩形之下,以及蓝色矩形子项之下。
堆叠顺序可以通过Item::z属性来影响。Z值小于0的项将堆叠在父项下方,如果指定了z值,则兄弟项将按照z轴顺序堆叠(使用创建顺序来解决冲突)。Z值仅影响与兄弟项和父项的堆叠顺序。如果一个项被其父项上方子树的元素遮挡,那么该项上的任何z值都不会增加其堆叠顺序以堆叠在 subtree之上。要将该项堆叠在其他子树之上,您需要更改更高级别的z值,或者重新排列可视项的层次结构。
Rectangle { color: "#272822" width: 320 height: 480 Rectangle { y: 64 z: 1 width: 256 height: 256 color: "green" Rectangle { x: 192 y: 64 z: 2000 width: 128 height: 128 color: "red" } } Rectangle { x: 64 y: 192 z: 2 width: 256 height: 256 color: "blue" } }
在上面的示例中,红色的矩形有一个较高的z值,但它仍然堆叠在蓝色矩形之下。这是因为它是绿色矩形的子项,而绿色矩形是蓝色矩形的兄弟项。绿色矩形的z值低于蓝色矩形,因此绿色矩形及其所有子项都将堆叠在蓝色矩形下方。
在某些Qt许可证下提供。
了解更多。