不透明度如何在QML中起作用?

问题描述 投票:1回答:1

我不明白以下代码中不透明度的行为!

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。但是coverbelowcover都有1的不透明度,而且因为belowcover小于cover,所以不应该看到(或者说我希望它不会被看到,或者我错过了什么?)。但是看到了coverbelowcover。我想只通过wrapper看到圆圈,而belowcover将隐藏在cover下方。我怎样才能做到这一点?我观察到将zcover设置为高于belowcoveropacity并不会使后者隐藏。

编辑:我观察到当父级的不透明度设置为小于1时,子对象变得不那么不透明,即使它们的x保持为1,如打印到控制台时所见。我不明白为什么。

qml opacity
1个回答
2
投票

当其父级的不透明度小于1时,不透明度为1但仍显示透明度的原因是:不透明度与其他属性(如yx等)相同,因此,即使子项的不透明度为1,它与父母的相对。因此,如果父级具有不透明度0.5,并且子级的不透明度为1,则子级的绝对不透明度值实际为0.5。另一个不透明度为0.5的孩子实际上具有0.5x0.5 = 0.25的不透明度。这类似于孩子的x值为0,当绝对several work-arounds可能不为0.这种设计在整个API中保持一致性。

semi-transparent colors。我最喜欢的是为父母使用color。尝试将wrappercolor: "#88000000"设置为belowcover。你再也看不到绿色矩形cover了。要看到这一点,你必须将cover的不透明度设置为小于1的某个值,这意味着layer是不透明的。这就是我实际解决问题的方法。

但是,如果父项是图像,则无法应用此项。然后你必须采取其他一些技术。例如:

  1. 使用layer.enabled: true。将changing the parent设为父母。
  2. here直接父母的不透明度小于1时。
  3. 许多其他技术被列为qazxswpoi。
© www.soinside.com 2019 - 2024. All rights reserved.