Search code examples
qtqmlqt-quick

How to hide an image using transparent rectangle in QML?


In the below code I want to hide the image using transparent rectangle. Please give me some solutions. I have used z value but it is not working. The image is still visible.

main.qml

import QtQuick 2.5
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")


    Image
    {
        id:underlyingImage
        width: 400
        height: 400
        x:0;
        y:0;
        source:"qrc:/Jellyfish.jpg"
        z:1
    }
    Rectangle
    {
        id:hiding_rect
        width: 400
        height: 400
        x:0;
        y:0;
        color:"transparent"
        z:100
    }
}

Solution

  • You can use the OpacityMask to achieve what you try, in the following example we hide a quadrant of the image.

    import QtQuick 2.5
    import QtQuick.Window 2.2
    import QtGraphicalEffects 1.0
    
    Window {
        visible: true
        width: 640
        height: 480
        title: qsTr("Hello World")
    
    
        Image
        {
            id:underlyingImage
            width: 400
            height: 400
    
            fillMode: Image.PreserveAspectCrop
            layer.enabled: true
            layer.effect: OpacityMask {
                maskSource: hiding_rect
            }
    
            source:"qrc:/Jellyfish.jpg"
        }
        Rectangle
        {
            id:hiding_rect
            width: underlyingImage.width/2
            height: underlyingImage.height/2
        }
    }
    

    enter image description here