不透明度在QML中是如何工作的?

不透明度在QML中是如何工作的?,qml,opacity,Qml,Opacity,我不理解下面代码中不透明的行为 import QtQuick 2.4 Rectangle { id: root width: 640; height: 480 Rectangle { id: wrapper width: 600; height:440 anchors.centerIn: parent color: "black" opacity: 0.5 Rectang

我不理解下面代码中不透明的行为

import QtQuick 2.4

Rectangle {
    id: root
    width: 640; height: 480

    Rectangle {
        id: wrapper
        width: 600; height:440
        anchors.centerIn: parent
        color: "black"
        opacity: 0.5

        Rectangle {
            id: belowcover
            width: cover.width / 2
            height: cover.height / 2
            anchors.centerIn: parent
            color: "green"
            z: 1
        }

        Rectangle {
            id: cover
            width: root.width / 2
            height: root.height / 2
            anchors.centerIn: parent
            color: "red"
            z: 1
        }

        Rectangle {
            id: seen
            width: 100; height: 100
            radius: width
            color: "blue"
            z: -1
        }
    }
}
wrapper
的不透明度为0.5,因此我可以通过它看到圆圈
seed
。但是
cover
belowcover
的不透明度都为1,并且
belowcover
小于
cover
,因此不应该看到它(或者我希望它不会被看到,或者我遗漏了什么?)。但是可以看到
封面
下面的封面
。我只想通过
包装
看到圆圈,而
下面的
覆盖
将保持隐藏在
覆盖
下面。我该怎么做?我观察到,将
cover的
z
设置为高于
belowcover的
z
不会使后者隐藏

编辑
我观察到,当父对象的不透明度设置为小于1时,子对象的不透明度会变小,即使它们的
不透明度保持为1,如打印到console时所示。我不明白为什么。

当其父对象的不透明度小于1时,子对象的不透明度为1,但却似乎具有透明度的原因是:不透明度与其他属性(如
x
y
)等)的不透明度相同。因此,即使子对象的不透明度为1,它也与父对象的不透明度相对。所以,若父对象的不透明度为0.5,子对象的不透明度为1,那个么子对象的绝对不透明度值实际上为0.5。另一个不透明度为0.5的子级实际上不透明度为0.5x0.5=0.25。这类似于子级的
x
值为0,此时绝对
x
可能不是0。这种设计保持了整个API的一致性

有。我最喜欢的一个是用于父母。尝试将
包装器的
颜色设置为
颜色:“#88000000”
。您无法再看到下方的绿色矩形
。要看到这一点,您必须将
cover
的不透明度设置为小于1的某个值,这意味着
cover
是不透明的。这就是我实际解决问题的方式

但是,如果父对象是图像,则无法应用此选项。然后你必须求助于其他一些技巧。例如:

  • 使用。为父级设置
    layer.enabled:true
  • 当直接父对象的不透明度小于1时
  • 还列出了许多其他技术

  • 看看关于不透明度的问题和相关答案。一般来说,不透明度总是从父级继承的,即您必须使用
    opacity:1
    设置公共
    父级以调整子级的不透明度。在某些情况下也有帮助,但计算成本较高。谢谢。因此,
    opacity
    与其他属性(如
    x
    y
    等)走同一条线。因此,即使子级的
    opacity
    值为1(类似于
    x
    值为0,当绝对
    x
    可能不是0时),它也相对于父级的值。很好的一致性,虽然最初让我感到困惑!我认为你应该将你的评论转移到回答中,以供将来的读者阅读。关于不透明度的选择既是一致性的选择(不可见控件的所有子控件都不可见),也是性能的选择(分层渲染代价高昂)。嗯,我没有回答,因为我很确定这个问题是重复的…就是找不到重复的!:杜克,这是副本:我为你找到的;-)