在QML中,如何防止子元素从其父元素继承不透明度? 我想为父元素及其子元素设置不同的不透明度值。
答案 0 :(得分:12)
实际上,为父元素设置layer.enabled: true
会对我有用。
整个元素被渲染到缓冲区,opacity
被应用于结果缓冲区(一次到整个层)。
请参阅http://doc.qt.io/qt-5/qml-qtquick-item.html#layer.enabled-prop
示例代码:
Rectangle {
width: 400
height: 200
opacity: 0.5
layer.enabled: true
Rectangle {
width: parent.width
height: parent.height
color: 'red'
}
Rectangle {
width: parent.width / 2
height: parent.height
color: 'blue'
}
}
这是一个解决方案,但请确保在启用分层时知道自己在做什么。
另一种可能的解决方案是使用阴影效果。
感谢#qt @ freenode上的peppe。
答案 1 :(得分:10)
你做不到。项目不透明度值是相对于其父项的值,因此如果您编写类似
的内容Rectangle {
color: "red"
opacity: 0.5
width: 200; height: 100
Rectangle {
color: "blue"
opacity: 1
width: 100; height: 100
}
}
您将看到两个矩形具有相同的不透明度。
答案 2 :(得分:10)
我认为,一种方法是使用here描述的半透明色而不是不透明度。
e.g。使用四色代码,如#800000FF
,用于半透明蓝色。
答案 3 :(得分:6)
我刚才遇到了这个问题。使用Qt 5.1.0
就我而言,我有Rectangle
元素opacity: 0.6
和子Image
元素。 Image
继承了透明度 - 不是理想的。
要解决此问题,我将主Rectangle
括在Item
元素中。将大小/位置定义从Rectangle
传递到外Item
。已将Image
移到Rectangle
之外。
最后,我在Item
内并排Rectangle
作为主要内容Image
和Item
。
只有Rectangle
维持不透明度0.6,因此矩形具有透明度,Image
完全不透明。
答案 4 :(得分:4)
有可能!您需要在Component.onCompleted
范围内测试父级的不透明度。如果为0,则需要将对象的父级更改为其当前父级的父级。
示例:
Item{
id:root
Item{
id:currentParent
opacity: 0
Item{
id:item
Component.onCompleted:{
if(parent.opacity === 0)
item.parent = currentParent.parent
}
}
}
}
答案 5 :(得分:2)
我认为不可能。你必须制作两个元素兄弟并根据自己的意愿改变它的不透明度。
答案 6 :(得分:2)
您无法阻止子元素从其父元素继承不透明度。
我个人的工作是改变这个:
Rectangle {
color: "red"
opacity: 0.5
width: 200; height: 100
Rectangle {
color: "blue"
opacity: 1
width: 100; height: 100
}
}
进入这个:
Item {
width: 200; height: 100
Rectangle {
anchors.fill: parent
color: "red"
opacity: 0.5
}
Rectangle {
color: "blue"
opacity: 1
width: 100; height: 100
}
}
或者这个(只有父母是纯色时才有可能):
Rectangle {
color: "#7FFF0000" // 50% transparent red
opacity: 0.5
width: 200; height: 100
Rectangle {
color: "blue"
opacity: 1
width: 100; height: 100
}
}
答案 7 :(得分:0)
我也用Qt 4.8.6遇到了这个问题。
在我的特定情况下,我希望顶级项目是20%透明的黑色,但其子元素不受父级的任何不透明度/透明度设置的影响。
由于QML的继承机制,Opacity无效。
但是我能够使用Qml Qt对象中的rgba函数。这让我得到了我想要的,父母现在20%透明,但子元素不受影响。
Rectangle {
width: 400
height: 400
color: Qt.rgba(0, 0, 0, 0.2) // Works perfectly, pure black with 20% transparency, equal to 0.2 opacity
// Unaffacted child elements here...
}
注意:我也尝试直接使用RGBA颜色代码,如前一张海报所述,但它没有用。
示例:
color: "#000000FA" // Supposed to be semi transparent, but always transparent, regardless of the alpha value
设置任何其他RGBA值的alpha值,但不是纯黑色。
答案 8 :(得分:0)
不可能这样做但你可以用
改变颜色 Qt.lighter(color,opacity)
例如
Rectangle {
color: Qt.lighter("red",.5)
width: 200; height: 100
Rectangle {
color: Qt.lighter("blue",1)
width: 100; height: 100
}
}