How to propagate hover events when using MouseArea?
-
Hello everyone! I've got Mouse Area blocking hover events for the underlying element. I need to keep it on top, so the question is how to propagate hover events.
SettinghoverEnabled: false
does nothing.import QtQuick 2.15 MouseArea { id: root property point previousPosition: defaultPosition readonly property point defaultPosition: Qt.point(-1, -1) signal mousePositionChanged(point position, point previousPosition) onPressed: previousPosition = Qt.point(mouseX, mouseY) onReleased: previousPosition = defaultPosition onPositionChanged: { if (pressed) { mousePositionChanged(Qt.point(mouseX, mouseY), previousPosition) } else { mouse.accepted = false } } hoverEnabled: true propagateComposedEvents: true }
How do I implement this?
-
Could you use a
PointHandler
instead of the MouseArea? -
@GrecKo
Thank you so much! It solved the problem. This is how I implemented it:import QtQuick 2.15 Item { id: root property point previousPosition: defaultPosition readonly property point defaultPosition: Qt.point(-1, -1) readonly property bool hovered: hoverHandler.hovered property alias hoverEnabled: hoverHandler.enabled signal mousePositionChanged(point position, point previousPosition) signal pressed() signal released() signal doubleClicked() HoverHandler { id: hoverHandler acceptedDevices: PointerDevice.Mouse } PointHandler { id: clickHandler onActiveChanged: { if (active) { root.previousPosition = Qt.point(point.position.x, point.position.y) root.pressed() } else { root.previousPosition = root.defaultPosition root.released() } point.accepted = false } onPointChanged: { if (active) { root.mousePositionChanged(Qt.point(point.position.x, point.position.y), root.previousPosition) } } acceptedButtons: Qt.LeftButton } TapHandler { id: doubleClickHandler onTapped: { if (tapCount === 2) { root.doubleClicked() } } acceptedDevices: PointerDevice.Mouse acceptedButtons: Qt.LeftButton } }
-
B bibasmall has marked this topic as solved
-
Nice, note that TapHandler has a doubleTapped signal.