import QtQuick 2.0 Item { id: root width: 100 height: 100 property bool layerEffect: false; onLayerEffectChanged: root.maybeUse(); Component.onCompleted: root.maybeUse(); property real layerOpacity: 1; property bool layerVisible: true; function maybeUse() { if (root.layerEffect) box.layer.effect = shaderEffect } Component { id: shaderEffect ShaderEffect { fragmentShader: " uniform lowp sampler2D source; uniform lowp float qt_Opacity; varying highp vec2 qt_TexCoord0; void main() { gl_FragColor = texture2D(source, qt_TexCoord0).bgra * qt_Opacity; } " } } Rectangle { id: box width: 100 height: 100 color: "#0000ff" visible: parent.layerVisible; opacity: parent.layerOpacity; Rectangle { x: 50 width: 50 height: 100 color: "#00ff00" } layer.enabled: true } }