【发布时间】:2015-05-11 22:48:25
【问题描述】:
我不明白以下代码中不透明的行为!
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,因此我可以透过它看到圆圈 seen。但是cover 和belowcover 的不透明度都是1,并且由于belowcover 小于cover,所以它不应该被看到(或者我希望它不会被看到,或者我错过了什么?)。但是cover 和belowcover 都被看到了。我只想通过wrapper 看到圆圈,而belowcover 将隐藏在cover 下方。我怎样才能做到这一点?我观察到将cover 的z 设置为高于belowcover 并不会使后者隐藏。
编辑:
我观察到,当父对象的不透明度设置为小于 1 时,子对象变得不那么不透明,即使它们的 opacity 保持为 1,如打印到控制台时所见。我不明白为什么。
【问题讨论】:
-
谢谢。所以
opacity与x、y等其他属性走同一条线。因此,即使孩子有opacity为1(类似于x值为0 , 当absolutex可能不为0)时,它是相对于父级的。良好的一致性,虽然最初让我感到困惑!我认为您应该将您的评论移至未来读者的答案。 -
关于不透明度的选择既是一种一致性选择(一个不可见的控件应该使其所有子控件都不可见),也是一种性能选择(分层渲染的成本很高)。好吧,我没有回答,因为我很确定这个问题是重复的……只是找不到重复的! :D
-
好的,这是复制品:stackoverflow.com/questions/9204226/qml-opacity-inheritance我帮你找到了 ;-)