前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt Quick QML MouseArea 事件穿透

Qt Quick QML MouseArea 事件穿透

作者头像
我与梦想有个约会
发布2023-10-21 15:24:10
9160
发布2023-10-21 15:24:10
举报
文章被收录于专栏:jiajia_deng

MouseArea 是 QML 中一个不可见的鼠标操作区域,可响应所有鼠标事件。一般情况下在自定义按钮、自定义需要鼠标交互的区域时使用。有时你只需要它的 hover 通知来做一些事情,而另外的点击等操作需要传递给其下层的控件,这时你就需要忽略其自身的鼠标按下释放等操作让其消息传递到下层了。

开启事件传递

MouseArea 有一个属性为 propagateComposedEvents,默认为 false,当设置为 true 时,就可以将事件传递给重叠的其他鼠标区域了(包括控件),见 Qt 官方文档:https://doc.qt.io/qt-5/qml-qtquick-mousearea.html#propagateComposedEvents-prop,示例代码如下:

代码语言:javascript
复制
MouseArea {
    anchors.fill: parent
    propagateComposedEvents: true
    onClicked: {
        console.log("clicked blue")
        mouse.accepted = false
    }
}

以上代码中开启了 propagateComposedEvents 属性,并且将 onClickedmouse.accepted 重置为 false 了,这样 onClicked 事件就会顺利的传递到下层控件中。如果你希望所有点击和释放操作都传递到下层,可以将 onPressed、onReleased 都重写掉,设置 accepted 为 false,如下示例:

代码语言:javascript
复制
MouseArea {
    anchors.fill: parent
    propagateComposedEvents: true
    onClicked: {
        mouse.accepted = false
    }
    onPressed: {
        mouse.accepted = false
    }
    onReleased: {
        mouse.accepted = false
    }
}

这样实现后,这个 MouseArea 的所有点击、按下、释放操作都会传递到下层,而且如果你开启了 hoverEnabled 属性,还不影响 onPositionChanged(鼠标移动)的事件响应,完美的实现了一个鼠标区域只响应鼠标移动但又可以传递点击等事件到下层控件的需求。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开启事件传递
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档