[Qt] 使用MouseArea 是需要注意的点

前言

多个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值是一致的,只是被后创建的组件盖上了)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值