在QML中,如何防止子元素从其父项继承不透明度? 我想为父级和它的子元素设置不同的不透明度值。QML不透明度继承
回答
我不认为它是可能的。你必须做出两个元素兄弟姐妹,并随意改变其不透明度。
你不能。项目不透明度值相对于他们的父母,所以如果你喜欢
Rectangle {
color: "red"
opacity: 0.5
width: 200; height: 100
Rectangle {
color: "blue"
opacity: 1
width: 100; height: 100
}
}
代码的东西你会看到两个矩形具有相同的不透明度。
刚才我碰到这个问题。使用Qt 5.1.0
在我的情况下,我有一个Rectangle
元素opacity: 0.6
和子元素Image
元素。 Image
正在继承透明度 - 不需要。
为了解决它,我在Item
元件包围的主Rectangle
。将尺寸/位置定义从Rectangle
传递到外部Item
。在Rectangle
之外移动Image
。
最后,我有Item
作为主要亲本,并且Rectangle
和Image
并排,在Item
里面。
只有Rectangle
保持不透明度0.6,所以矩形具有透明度,Image
是完全不透明的。
实际上,为父元素设置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'
}
}
这是一个解决方案,但要确保你知道让层次感,当你在做什么。
另一个可能的解决方案是使用shadereffect。
感谢peppe#qt @ freenode。
我也遇到了Qt 4.8.6的这个问题。
在我的特殊情况下,我希望顶级项目具有黑色20%透明,但其子元素不受任何来自父级的不透明度/透明度设置的影响。
由于QML的继承机制,不透明度不起作用。
但我能够从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阿尔法值的工作,只是不能与纯黑色。
这是可能的!您需要在Component.onCompleted
范围内测试父级的不透明度。如果其值为0,则需要将对象的父对象更改为其当前父对象的父对象。
例子:
Item{
id:root
Item{
id:currentParent
opacity: 0
Item{
id:item
Component.onCompleted:{
if(parent.opacity === 0)
item.parent = currentParent.parent
}
}
}
}
有趣的...... :-) – mchiasson 2016-01-15 15:44:46
您不能防止子元素从其父继承的不透明度。
我个人的解决办法是改变这种:
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
}
}
这是不可能的,但你可以改变他们的颜色
Qt.lighter(color,opacity)
例如
Rectangle {
color: Qt.lighter("red",.5)
width: 200; height: 100
Rectangle {
color: Qt.lighter("blue",1)
width: 100; height: 100
}
}
- 1. CSS透明度继承问题
- 2. div透明度和背景继承
- 3. QML - 堆叠元素的不透明度
- 4. 重置继承的不透明度/过滤器:alpha到完全透明
- 5. 我不想继承CSS中父级的子级不透明度
- 6. CSS继承透明不知从哪儿
- 7. Javascript:由navicon继承的togglebar的不透明度
- 8. CSS - DIV内DIV的不透明度值的继承
- 9. 子元素继承父级的不透明度
- 10. 为什么这个div继承父级的不透明度?
- 11. 整体SVG不透明度/透明度
- 12. 强制绝对定位的元素继承透明度
- 13. 不透明度
- 14. CSS过渡:不透明度不透明。 。
- 15. 不透明度使div更不透明
- 16. 模板和不透明指针是否继承不兼容?
- 17. 在QML中创建不透明度动画
- 18. ccDrawLine不透明度?
- 19. Dat.gui不透明度
- 20. 与不透明度
- 21. .DrawImage不透明度?
- 22. 使用jQuery创建叠加,但内容继承CSS不透明
- 23. QML:如何创建半透明/半透明的WebView元素?
- 24. 段落中的不透明度变化改变了文本的不透明度和背景不透明度
- 25. 我需要不透明度(透明度)的IMG与CSS ie8
- 26. Firefox不透明度(透明度)渐变 - 淡出图像
- 27. 不透明度的文本透明度CSS
- 28. C#控制台不透明度/透明度
- 29. 图像的不透明度/透明度左至反之亦然
- 30. QML SwipeView具有不透明的背景。我怎样才能让它透明?
看到能证实这种行为。坦率地说,我看不出有这样一种选择的理由,我怀疑这是一个错误。 – Avio 2013-06-06 09:16:29
我不认为这是一个错误。它与许多常见属性(例如:x,y,z)的形式相同。它允许你不使用绝对引用来安排每个项目。 – 2013-06-10 07:37:17
我试图打开一个针对QtQml的错误,它已经在几分钟内关闭了,所以看起来Qt的人们有着同样的观点。但我仍然对这件事持怀疑态度。如果我写了一行代码,我不希望它首先被忽略,其次,如果它被忽略,我想警告我的代码没有效果。但是,我再次看不到一个原因,如果一个元素块的不透明度为0.5,我不能仅仅使其中一个具有不透明度1.如果它们在逻辑上被分组为主容器的子元素,为什么应该我只是其中一个兄弟姐妹? – Avio 2013-06-10 07:58:45