qml中关于多个MouseArea之间的事件传递(propagateComposedEvent)

import QtQuick 2.0

Rectangle { 
color: “yellow” 
width: 100; height: 100

  MouseArea {
      anchors.fill: parent
      onClicked: console.log("clicked yellow")
  }

  Rectangle {
      color: "blue"
      width: 50; height: 50

      MouseArea {
          anchors.fill: parent
          propagateComposedEvents: true
          onClicked: {
              console.log("clicked blue")
              mouse.accepted = false
          }
      }
  }

}

在帮助文档中,propagateComposedEvents属性,当为true时,可以传递鼠标事件。默认值为false。在设置propagateComposedEvents属性后,点击事件触发后,添加一行代码 mouse.accepted = false ,,鼠标事件即可通过该MouseArea传递到其下层(Mousea之间的关系不一定非要是parent关系),若不加mouse.accepted = false 则设置propagateComposedEvents属性是无效的,以上代码可在Qt帮助文档中看到,由于Mousea组件默认鼠标事件无法传递,故可设置模态和非模态界面

补充下

import QtQuick 2.0

Rectangle { 
color: “yellow” 
width: 100; height: 100

  MouseArea {
      anchors.fill: parent
      onClicked: {
          console.log("clicked yellow");
          }
        onPressed:{
              console.log("Pressed yellow")
          }
          onReleased:{
              console.log("Released yellow");
          }
  }

  Rectangle {
      color: "blue"
      width: 50; height: 50

      MouseArea {
          anchors.fill: parent
          propagateComposedEvents: true
          onClicked: {
              console.log("clicked blue")
              mouse.accepted = false
          }
          onPressed:{
              console.log("Pressed blue")
              mouse.accepted = false;
          }
          onReleased:{
              console.log("Released blue");
              mouse.accepted = false;
          }
      }
  }

}

pressed released clicked事件的先后顺序 
对于blue进行操作; 
注掉pressed和released事件,yellow 只触发了 clicked事件 
注掉clicked和released事件,yellow三个事件都触发了 
注掉clicked和pressed事件,yellow只触发了released事件

可以看出,pressed信号优先,blue被mouse.accepted = false之后,blue便不可触发信号。

转载:http://blog.csdn.net/xi__q/article/details/52199676

参考:http://stackoverflow.com/questions/23911433/qml-cant-get-mouse-released-event-when-i-dont-accept-mouse-pressed-event

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值