Reputation: 843
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;
}
}
}
Upvotes: 1
Views: 3093
Reputation: 413
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.
Upvotes: 2
Reputation: 517
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)
}
}
Upvotes: 0