在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. IE不繼承不透明度
- 2. css - 停止繼承的不透明度
- 3. div透明度和背景繼承
- 4. CSS透明度繼承問題
- 5. QML - 堆疊元素的不透明度
- 6. 孩子DIV不繼承父不透明
- 7. QML繼承
- 8. 重置繼承的不透明度/過濾器:alpha到完全透明
- 9. 我不想繼承CSS中父級的子級不透明度
- 10. CSS繼承透明不知從哪兒
- 11. 科繼承父母不透明
- 12. 不透明度的聲明是由父母繼承即使聲明明確
- 13. CSS - DIV內DIV的不透明度值的繼承
- 14. Javascript:由navicon繼承的togglebar的不透明度
- 15. 爲什麼這個div繼承父級的不透明度?
- 16. 爲什麼子元素繼承父級不透明度?
- 17. 子元素繼承父級的不透明度
- 18. JButton的不透明度/半透明度?
- 19. 整體SVG不透明度/透明度
- 20. 強制絕對定位的元素繼承透明度
- 21. 無法強制繼承父項的透明度的小圖片
- 22. 不透明度
- 23. CSS過渡:不透明度不透明。 。
- 24. GMSMarker不透明度不透明動畫
- 25. 不透明度使div更不透明
- 26. 全屏時QML窗口不透明
- 27. 如何使css不透明屬性不從父div繼承?
- 28. 模板和不透明指針是否繼承不兼容?
- 29. 在QML中創建不透明度動畫
- 30. 如何將不透明度蒙版應用於QML項目?
看到能證實這種行爲。坦率地說,我看不出有這樣一種選擇的理由,我懷疑這是一個錯誤。 – 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