前言

多个MouseArea存在重叠区域时,使用  propagateComposedEvents 进行事件的传递分配,这些在 Qt 的帮助文档里都有,这里不赘述。

这里需要说一下当 MouseArea 和 包含鼠标事件的组件一起使用会出现的问题:

问题一:组件的鼠标事件全部失效

问题二:解决了问题一以后,MouseArea的drag拖拽功能失效

编程建议:

当MouseArea 和 有鼠标事件的组件一起使用时,请把包含组件的 Item  和 MouseArea 分离,且把 MouseArea 写到 Item 的前面,然后通过 id  的方式让 MouseArea 填充 Item。这样既保证了 Item 内部组件都能够正常响应鼠标事件以完成自有的响应功能,也能保证MouseArea的 drag 拖拽功能能工作。

正确Demo:

main.qml

Item{

MouseArea{
id:ma
anchors.fill:demoqml
drag.target:demoqml
}

DemoItem.qml{
id:demoqml
}
}

DemoItem.qml

Item{


Button{
//...
}

ComboBox{
//...
}
}

几种异常Demo的写法:

可拖动,无法响应组件事件:

main.qml

Item{

DemoItem{
id:demoitem

MouseArea{
id:ma
anchors.fill:parent
drag.target:demoitem
}
}
}

不可拖动,组件有响应:

main.qml

Item{

MouseArea{

drag.target:demoitem

DemoItem{
id:demoitem
anchors.fill:parent
}
}
}

注意:

同一层级,越靠底部的组件越先创建,先创建的会被后创建的覆盖,越在底层,可以理解为z值越低(其实z值是一致的,只是被后创建的组件盖上了)。