Qml类型:MouseArea

Qml类型:MouseArea

MouseArea鼠标点击事件的透传

实现MouseArea的透传,让鼠标事件从父控件传递到子控件。

建立两个Rectanglerect1rect2rect1rect2的父控件,并且子控件的区域和父控件的区域一样,如下代码(显示为橙色的一个矩形区域,红色的父控件被橙色的子控件所覆盖)。如果在父控件中实现一个覆盖整个父控件的MouseArea的点击事件,那么默认的情况下,只有父控件接收到点击事件,而子控件不会接收到点击事件。

需要让子控件能接收到父控件的点击消息时,父控件的MouseArea需要做两个处理:

  • 1、设置propagateComposedEventstrue,此属性表示组合的鼠标事件是否会自动传播到与此MouseArea重叠但视觉堆叠顺序较低的其他MouseArea。默认情况下,此属性为false。
  • 2、在MouseArea的消息处理中设置MouseEvent::acceptedfalse,表示让当前的事件继续往下传递。
Rectangle {
	id: rect1
	width: 328
	height: 32
	color: "red"

	Rectangle {
		id: rect2
		anchors.fill: parent
		color: "orange"
		MouseArea {
			anchors.fill: parent
			onClicked: {
				console.log("rect2 clicked 22")
			}
		}
	}

	MouseArea {
		anchors.fill: parent
		propagateComposedEvents : true	// 1.
		onClicked: {
			console.log("rect1 clicked 333")
			mouse.accepted = false		// 2.
		}
	}
}

上述代码mouse.accepted = false中的mouse是哪来的?

这个mouseonClicked槽函数对应的clicked信号携带的参数,clicked信号的声明是:clicked(MouseEvent mouse)
在这里插入图片描述
如果想让MouseArea不接受鼠标事件可以设置acceptedButtonsQt.NoButton


咨询作者请使用微信公众号搜索:“上官宏竹”,或者扫下面的二维码,后台留言咨询。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值