不透明度在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时),它也相对于父级的值。很好的一致性,虽然最初让我感到困惑!我认为你应该将你的评论转移到回答中,以供将来的读者阅读。关于不透明度的选择既是一致性的选择(不可见控件的所有子控件都不可见),也是性能的选择(分层渲染代价高昂)。嗯,我没有回答,因为我很确定这个问题是重复的…就是找不到重复的!:杜克,这是副本:我为你找到的;-)