QML MouseArea 嵌套鼠标点击事件失效问题

QML MouseArea重叠失效问题

当有两个MouseArea重叠时,鼠标按下、抬起、点击操作,正常情况下是响应后面一个MouseArea的操作。

QML MouseArea 嵌套鼠标点击事件失效问题_第1张图片
结果:
qml: blue pressed
qml: blue released
qml: blue clicked

若在某些条件下想要响应red的操作,某些条件下想响应blue的操作呢?

对于嵌套MouseArea事件传递,有propagateComposedEvents属性,当为true时可以传递鼠标事件,默认值为false,所以默认是上述结果。

当propagateComposedEvents为true时,事件触发后,添加mouse.accepted = false语句,事件便可传递到下层mouseArea。
QML MouseArea 嵌套鼠标点击事件失效问题_第2张图片
结果:
qml: blue pressed
qml: Red pressed
qml: Red released
qml: red clicked

那么问题来了,若red按下之后便失效了,会怎样?
在上述基础上按下时加上mouser.visible=false。
输出:
qml: blue pressed
qml: blue pressed
这个很好理解,因为按下时,blue收到按下操作,然后事件传递到red,red执行按下操作之后red失效,那么抬起和点击操作就识别不到了。

而且,即使后续red再次有效后,也不能收到事件。

** 总结 **
涉及到MouseArea嵌套,且有鼠标区域有设置可见不可见时,应该要特别留意,若发生上述:失效前收到的是按下事件,没有收到抬起事件,那么当它再次有效时,也无法再收到抬起事件,那么点击事件就会无效了。

解决时,可以用组件封装MouseArea,通过控制组件的可见性来达到鼠标区域可点与不可点的效果。
另外就是用MultiPointTouchArea代替MouseArea,可以避免上述问题。

你可能感兴趣的:(QT,鼠标点击事件,QML)