Qt Quick 中的视觉父级

一、视觉父级

使用 Qt Quick 创建视觉场景时,理解视觉父级的概念很重要。

Qt Quick 中的视觉父级概念与 QObject 父级层次结构中的对象父级概念是分开的,但与之相关。所有 QML 对象都有一个父对象,它由声明对象的对象层次结构决定。使用 QtQuick 模块时,Item 类型是该模块提供的所有可视项的基本类型,它提供了附加可视父项的概念,由项的 parent 属性定义。每个项目都有一个视觉父项;如果项目的 parent 属性值为 null,则该项目将不会在场景中呈现。

出于内存管理目的,分配给项目 data 属性的任何对象都将成为其 QObject 层次结构中项目的子项。此外,如果添加到 data 属性的对象是 Item 类型,它也会分配给 Item::children 属性并成为视觉场景层次结构中项目的子项。 

为方便起见,Item 的 data 属性是其默认属性。这意味着在 Item 对象中声明的任何子项未分配给特定属性都会自动分配给 data 属性,并成为该项目的子项。

即一般写代码写成左边这样而不必写成右边这样:

可以通过设置其 parent 属性随时更改项目的视觉父级。因此,项目的视觉父级不一定与其对象父级相同。

将一个项目声明为另一个项目的子项目并不自动意味着该子项目将被适当定位或调整大小以适应其父项目。某些 QML 类型可能具有影响子项定位的内置行为,例如 Row 对象自动将其子项重新定位为水平形式。此外,父项不会自动裁剪其子项以将它们可视地包含在父项的视觉边界内,除非其clip 属性设置为 true。

二、堆叠顺序

Qt Quick 项目使用递归绘制算法来确定在发生冲突时将哪些项目绘制在顶部。通常,项目按照它们的创建顺序(或在 QML 文件中指定)绘制在其父项目的顶部。

Item::z 属性可以影响堆叠顺序。如果分配了 z 值,则兄弟级将按 z 顺序堆叠。

如果有一个项目被其父项目上方的子树遮挡,则设置该项目的 z 值不会改变这种状况。要将该项目堆叠在其他子树之上,必须在层次结构中更上层更改 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"
    }
}

三、画布所有权

Qt Quick 场景中渲染内容的定义是基于 QQuickWindow::contentItem 的可视项树。 因此,要将 Item 添加到特定的 Qt Quick 场景以进行渲染,它需要成为已在可视项层次结构中的 Item 的可视层次结构子项,例如 QQuickWindow::contentItem

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值