当一个项目的祖先具有不透明度0时,我可以渲染一个项目吗?
这个问题的动机是other question of mine(我将其称为" hidden-texture-source"问题)。请注意,目前我使用opacity: 0
而不是visible: false
,但这会导致与链接问题相同的问题。
我隐藏项目的原因是this。
有一次,我只是直接剔除需要用作纹理源的每个项目。因此,隐藏纹理源问题的修复很简单:(简化伪代码)
texSourceItem.opacity = 1;
cppItem.update(); // QQuickFramebufferObject
texSourceItem.opacity = 0; // reset back to 0
但现在我还要剔除这些物品的全部Row
个。由于不透明是继承的,如果我想更新cppItem,我必须为整个父Row
做隐藏式舞蹈。然后,两个纹理源项可能发生在具有互锁定时的取消隐藏过程中,因此为了避免错误,我必须保留一个自定义引用计数器,该计数器知道当前正在更新多少个cppItem。这对我来说太复杂了解决方案。所以我的问题的答案将是有益的。
答案 0 :(得分:0)
设置此属性后,指定的不透明度也会单独应用于子项。在某些情况下,这可能会产生意想不到的效果。例如,在下面的第二组矩形中,红色矩形指定了0.5的不透明度,这会影响其蓝色子矩形的不透明度,即使该子项未指定不透明度。
但你可能知道这一点。
我并不完全明白您的情况究竟是什么,但我能看到的唯一解决方案是让Item
成为没有后代的透明{ {1}}而是它的兄弟姐妹。
当然,您无法锚定Item
s(grand)*孩子,但您仍可以映射他们的位置。 (但要注意issue,如果位置发生变化,Item
可能很难更新。
如果我们有这样的情况:
mapTo/FromItem()
但我们希望继续渲染Rectangle {
id: rect1
color: 'red'
anchors.fill: parent
Rectangle {
id: rect2
width: 200
height: 200
color: 'blue'
anchors.centerIn: parent
Rectangle {
id: rect3
width: 50
height: 50
color: 'green'
anchors.centerIn: parent
}
}
MouseArea {
anchors.fill: parent
onClicked: parent.opacity = !parent.opacity
}
}
我们可以这样做:
rect2
对于ShaderEffectSource {
sourceItem: rect2
sourceRect: Qt.rect(-rect2.x, -rect2.y, rect1.width, rect1.height)
anchors.fill: rect1
}
它变得不方便,因为我们现在需要跟踪相对位置。 (要使其具有动态,请参阅之前发布的链接)
rect3