Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Qt Quick QML MouseArea 事件穿透

Qt Quick QML MouseArea 事件穿透

作者头像
我与梦想有个约会
发布于 2023-10-21 07:24:10
发布于 2023-10-21 07:24:10
1.1K00
代码可运行
举报
文章被收录于专栏:jiajia_dengjiajia_deng
运行总次数:0
代码可运行

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

开启事件传递

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MouseArea {
    anchors.fill: parent
    propagateComposedEvents: true
    onClicked: {
        console.log("clicked blue")
        mouse.accepted = false
    }
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
完全依赖QML实现播放器
一直听闻QML无比强大好用,工作中需要扣一个同时播放视频的Demo,所以就趁这个机会研究了一下。
gongluck
2020/03/05
2.2K0
完全依赖QML实现播放器
Qt官方示例-Qml鼠标点击与拖拽
  当您在红色方块内单击鼠标时,界面下方区域文本将显示出单击鼠标的一些属性,这些属性可用于QML中。按下鼠标时,红色方块的不透明度将降低,并保留在MouseArea内。当其中发生单击或双击等其他操作时,MouseArea会发出对应的信号。
Qt君
2020/04/01
2.8K0
qml入门教程_前端从入门到放弃
<9>:Property and number animation in mouse event:
全栈程序员站长
2022/09/19
1.9K0
qml入门教程_前端从入门到放弃
【专业技术】还有人在用Qt开发app嘛?
编者按: 这个世界不缺工程师,但是缺大师。如果在Qt里写个app,传统做法,需要熟悉API,熟悉C++,熟悉Qt本身的实现,同时还要熟悉编程环境。 现在出现了一种类似于脚本Javascript的语言,利用它,我们可以少编写一些程序逻辑。可不,最近我就利用它开发出了个浏览器。大家都没有。 欢迎来到声明式UI语言QML的世界.在本入门教程中,我们使用QML创建一个简单的文本编辑器.阅读这个教程后,就可以使用QML和Qt C++开发应用程序了. 安装 首先需要安装包含Qt Quick的Qt最新版本,现在是Qt4.
程序员互动联盟
2018/03/14
4.8K0
【专业技术】还有人在用Qt开发app嘛?
Qt官方示例-QML标签页
❝TabWidget示例演示了如何使用属性别名和QML Object默认属性创建标签页。❞ TabWidget.qml Item { id: tabWidget // 核心实现 // 将默认属性设置为stack.children意味着TabWidget的所有子项实际上都已添加到"stack"项的子项中。 // 有关默认属性的详细信息,请参见"Property Binding"文档。 default property alias content: stack.c
Qt君
2023/03/17
1.3K0
Qt官方示例-QML标签页
【QML】简单动画实现
QML动画 **示例1:**动画作为属性值的来源 import QtQuick 2.0 //动画作为属性值的来源 //语法: 动画on属性 //easing属性来实现缓和曲线 Rectangle{ width: 100 height: 100 color: "red" PropertyAnimation on x{ to:50 duration: 1000 loops: Animation.Infinite //无限循环
半生瓜的blog
2023/05/13
5610
【QML】基础语法
QtQuick是一种高级界面技术,可轻松创建供移动、嵌入式设备使用的触摸式界面、轻量级应用程序。QtQuick主要由3部分组成:QtQuick设计器,QML语言、quick模块。
半生瓜的blog
2023/05/13
7990
【QML】基础语法
Qt开发-QT Quick
Row 则是一个单独的 Item ,专门用来管理其它 Item 的,后面介绍的几种布局,也是类似的。
码客说
2021/11/10
2.6K0
QML入门教程:一、QML和QtQuick简介以及QML实例
从 Qt 4.7 开始,Qt 引入了一种声明式脚本语言,称为 QML(Qt Meta Language 或者 Qt Modeling Language),作为 C++ 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。 QML 是一种基于 JavaScript 的声明式语言。在 Qt 5 中, QML 有了长足进步,并且同 C++ 并列成为 Qt 的首选编程语言。也就是说,使用 Qt 5,我们不仅可以使用 C++ 开发 Qt 程序,而且可以使用 QML。虽然 QML 是解释型语言,性能要比 C++ 低一些,但是新版 QML 使用 V8,Qt 5.2 又引入了专为 QML 优化的 V4 引擎,使得其性能不再有明显降低。在 Nokia 发布 Qt 4.7 的时候,QML 被用于开发手机应用程序,全面支持触摸操作、流畅的动画效果等。但是在 Qt 5 中,QML 已经不仅限于开发手机应用,也可以用户开发传统的桌面程序。 QML 文档描述了一个对象树。QML 元素包含了其构造块、图形元素(矩形、图片等)和行为(例如动画、切换等)。这些 QML 元素按照一定的嵌套关系构成复杂的组件,供用户交互。 ——摘自《Qt学习之路2》
全栈程序员站长
2022/11/01
4.6K0
QML入门教程:一、QML和QtQuick简介以及QML实例
【C++】Qt:QML介绍与入门示例
Qt Quick是一个用于构建现代、高效、可扩展用户界面的框架。它是Qt开发框架的一部分,旨在通过声明性语法和JavaScript绑定来简化用户界面的设计和实现。
DevFrank
2024/07/24
6880
【C++】Qt:QML介绍与入门示例
兼容Qt4/Qt5版本Qml控件Slider
通过滑动滑块选择一个值 导入方法: 文件导入 兼容性: QtQuick1.x与 QtQuick2.x 继承: Item 属性 background: Item from: real handle: Item orientation: enumeration position: real pressed: bool stepSize: real to: real value: real 方法 function decrease() function increase() 描述 通过滑动滑块选择一个值 Slid
Qt君
2019/07/15
6820
兼容Qt4/Qt5版本Qml控件Slider
Qt官方示例-Qml翻转动画
❝示例演示翻转动画(沿着x轴或y轴翻转动画)。❞ 主要代码: import QtQuick 2.0 Flipable { id: container property alias source: frontImage.source property bool flipped: true property int xAxis: 0 property int yAxis: 0 property int angle: 0 width: front.
Qt君
2023/03/17
7860
Qt官方示例-Qml翻转动画
兼容Qt4/Qt5版本的QML例程
本篇文章介绍兼容Qt4与Qt5版本的Qml简单例程。由于Qt4与Qt5版本的qml文件不能使用宏来区分,所以使用qmake执行脚本来修改qml版本差异代码。(末尾源代码地址) qml文件转换 下列代码是项目文件代码,会在编译之前执行; 主要作用为识别Qt版本然后替换对应qml文件中的 importQtQuick1.x或 importQtQuick2.x; equals(QT_MAJOR_VERSION, 4) { equals(QT_MINOR_VERSION, 7): QT_QUICK_VERSI
Qt君
2019/07/15
1.6K0
Qml获取某个控件的全局坐标
  点击详情(detail)按钮调出菜单列表。菜单栏的位置需要定位详情按钮的下面,那么就需要知道具体坐标。
Qt君
2023/03/17
2.8K0
Qml获取某个控件的全局坐标
Qt Quick实践系列-函数绑定
  由于display函数内部使用了string1和string2变量,当其中任意一个变量变更都会更新text: display()表达式。这种动态绑定在界面编程中会变得更易用方便。
Qt君
2020/05/08
4840
一个好的Qml文件(翻译文)
  什么样的Qml文件(通常称为组件)是一个高质量的文件?   让我们看看示例1:
Qt君
2019/07/15
1.1K0
pyqt5与QML开发小结
qt 5.11 与 qt 5.12 中Qquick的差异还是蛮大的,由开发环境:Pyqt5.11 + Qt5.12 部署到 Pyqt5.11 + Qt5.11时遇到以下问题:
py3study
2020/01/17
1.5K0
翻译 | QML编码约定
如果列表对象仅包含一个元素,则通常会省略方括号。例如,一个组件仅具有一个状态是很常见的。在这种情况下,如果这样写:
Qt君
2020/02/14
9570
Qt开发-QT Quick之自定义组件
按钮 添加ZButton.qml import QtQuick 2.14 import QtQuick.Window 2.14 /* 文件名即自定义控件名 使用别名导出属性:相当于函数的变量形参 不同的是导出的属性,调用控件是可以不使用(赋值) */ Rectangle { id: root //导出自定义属性 property alias text: label.text property alias fontSize: label.font.po
码客说
2021/11/17
1.7K0
Qt开发-QT Quick之自定义组件
QML知识-与Qt数据交互
使用Qml编程时,常常会与Qt之间进行数据访问或修改,本篇文章是介绍Qt与Qml的数据交互方法,一般有两种方法。
Qt君
2019/07/16
2.1K0
相关推荐
完全依赖QML实现播放器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验