I want to get mouse X and mouse Y on map. I use mouse.x but I get an error that "Reference Error mouse is not defined". In qt's signals I dont get error but in signals that I create I get error
Not error signal:
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton
onm ouseXChanged: {
var coordinate = mapview.toCoordinate(Qt.point(mouse.x,mouse.y))
store_coordinate.store(coordinate)
mainwindow.mapClickSignal()
if (mouse.button === Qt.RightButton)
{
mainwindow.rightClickedMenuFreeSpace(Qt.point(mouse.x,mouse.y),coordinate.latitude,coordinate.longitude)
}
}
onPressed: {
mouse.accepted = false
}
}
Error signal:
Connections {
target: mainwindow
onSelectItem: {
var coordinate = QtPositioning.coordinate(x, y)
mapview.center = coordinate
mapview.update()
}
onRemoveAction: {
var coordinate = mapview.toCoordinate(Qt.point(mouse.x,mouse.y))//error
mainwindow.deleteAction(coordinate.latitude,coordinate.longitude)
}
}
CodePudding user response:
Have a look at the signal documentation.
onMouseXChanged is a property change signal handler which does not have parameters. Therefore you need to use ids and access properties if available, e.g. mouseX/mouseY.
onPressed and onPositionChanged are normal signal handler which provide parameter. To access those, you should assign a function to the handler. Both arrow functions and anonymous functions work.
Depending on the target of your Connections object the same applies. You should have a look into the documentation of the target and look at the signals, figure out which parameters are provided.
import QtQuick
Window {
id: root
width: 400
height: 300
visible: true
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
onm ouseXChanged: {
console.log("onMouseXChanged", Qt.point(mouseArea.mouseX, mouseArea.mouseY))
}
onPressed: function(mouse) {
mouse.accepted = false
}
onPositionChanged: function(mouse) {
console.log("onPositionChanged", Qt.point(mouse.x, mouse.y))
}
}
Connections {
target: mouseArea
function onWheel(wheel) { console.log(wheel) }
}
}
CodePudding user response:
The mouseEvent mouse is passed as a parameter to only some signals (e.g. onClicked, onPressed). However, the mouseEvent mouse parameter is not available in all signal handlers in MouseArea, so, I wouldn't expect it to be available in onMouseXChanged. Also, the mouse parameter/property is not defined outside of MouseArea.
Consider setting the id: mouseArea, i.e.
MouseArea {
id: mouseArea
}
Then in your Connections you can make use of mouseArea.mouseX and mouseArea.mouseY.
