0
votes

I am trying to use Mousearea in my rectangle in QML. I am getting onPressed, OnCLicked, onDoubleClicked and onPositionChanged.

But, QML does not receive onReleased event. Can you guys let me know, why its not working? My code below:

Rectangle {
    width: parent.width
    height: 500
    MouseArea {
        id: mouseArea
        anchors.fill: parent
        hoverEnabled: true
        preventStealing: true
        onPositionChanged: {
            //                    console.log("onPositionChanged mouse X", mouse.x)
            //                    console.log("onPositionChanged mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onClicked:{
            console.log("onClicked mouse X", mouse.x)
            console.log("onClicked mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onDoubleClicked:{
            console.log("onDoubleClicked mouse X", mouse.x)
            console.log("onDoubleClicked mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onExited:{
            console.log("onExited")
        }
        onPressAndHold:{
            console.log("onPressAndHold mouse X", mouse.x)
            console.log("onPressAndHold mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onPressed:{
            console.log("onPressed mouse X", mouse.x)
            console.log("onPressed mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onReleased:{
            console.log("onReleased mouse X", mouse.x)
            console.log("onReleased mouse Y", mouse.y)
            mouse.accepted = false;
        }
        onCanceled:{
            console.log("onCanceled mouse X", mouse.x)
            console.log("onCanceled mouse Y", mouse.y)
            mouse.accepted = false;
        }
    }
}
2

2 Answers

1
votes

If you attach an onPressed handler that clears mouse.accepted, the MouseArea assumes that if you weren't interested in the press, you're not interested any subsequent related signals, so it doesn't emit clicked, pressAndHold, or release. On the other hand, if you leave mouse.accepted set, then other lower MouseArea objects won't see any of the messages. This unfortunately makes it impossible to monitor all signals that are handled by a lower MouseArea.

0
votes

As per the event behaviour in this docs.

When handling this signal, changing the accepted property of the mouse parameter has no effect.

So if you comment the lines mouse.accepted = false; in above code It ill work.

Working code below

MouseArea {
    id: mouseArea
    anchors.fill: parent
    hoverEnabled: true
    preventStealing: true         
    onReleased:{
        console.log("onReleased mouse X", mouse.x)
        console.log("onReleased mouse Y", mouse.y)
    }
}