前言
多个MouseArea存在重叠区域时,使用 propagateComposedEvents 进行事件的传递分配,这些在 Qt 的帮助文档里都有,这里不赘述。
这里需要说一下当 MouseArea 和 包含鼠标事件的组件一起使用会出现的问题:
问题一:组件的鼠标事件全部失效
问题二:解决了问题一以后,MouseArea的drag拖拽功能失效
编程建议:
当MouseArea 和 有鼠标事件的组件一起使用时,请把包含组件的 Item 和 MouseArea 分离,且把 MouseArea 写到 Item 的前面,然后通过 id 的方式让 MouseArea 填充 Item。这样既保证了 Item 内部组件都能够正常响应鼠标事件以完成自有的响应功能,也能保证MouseArea的 drag 拖拽功能能工作。
正确Demo:
main.qml
DemoItem.qml
几种异常Demo的写法:
可拖动,无法响应组件事件:
main.qml
不可拖动,组件有响应:
main.qml
注意:
同一层级,越靠底部的组件越先创建,先创建的会被后创建的覆盖,越在底层,可以理解为z值越低(其实z值是一致的,只是被后创建的组件盖上了)。