qml-MouseArea

        MouseArea 是一个不可见的Item,通常与可见项目结合使用,以便为该项目提供鼠标处理。通过有效地充当代理,鼠标处理的逻辑可以包含在 MouseArea 项中。
        enabled 属性用于启用和禁用代理项的鼠标处理。禁用时,鼠标区域对鼠标事件变得透明。
        MouseArea 是一个不可见的 Item,但它有一个可见的属性。当设置为 false 时,鼠标区域对鼠标事件变得透明。
       pressed的只读属性指示用户是否在鼠标区域上按住鼠标按钮。此属性通常用于用户界面中属性之间的绑定。 containsMouse 只读属性指示鼠标光标在鼠标区域上的存在,但默认情况下,仅当按住鼠标按钮时;有关详细信息,请参阅 containsMouse 文档。
        通过定义了事件处理程序属性的信号提供有关鼠标位置和按钮单击的信息。最常用的涉及处理鼠标按下和单击:onClicked、onDoubleClicked、onPressed、onReleased 和 onPressAndHold。也可以通过 onWheel 信号处理鼠标滚轮事件。
        如果 MouseArea 与其他 MouseArea 项的区域重叠,您可以选择将 clicked、doubleClicked 和 pressAndHold 事件传播到这些其他项,方法是将propagateComposedEvents 设置为 true 并拒绝应该传播的事件。有关详细信息,请参阅propagateComposedEvents 文档。
        默认情况下,MouseArea 项仅报告鼠标点击,而不是鼠标光标位置的变化。设置 hoverEnabled 属性可确保使用为 onPositionChanged、onEntered 和 onExited 定义的处理程序,并且即使未按下鼠标按钮,也会更新 containsMouse 属性。

        以下示例在 Rectangle 中使用 MouseArea,单击时将 Rectangle 颜色更改为红色:

Rectangle {
     width: 100; height: 100
     color: "green"

     MouseArea {
         anchors.fill: parent
         onClicked: { parent.color = 'red' }
     }
 }

        许多 MouseArea 信号传递一个鼠标参数,该参数包含有关鼠标事件的附加信息,例如位置、按钮和任何键修饰符。
        这是上一个示例的扩展,当该区域被右键单击时会产生不同的颜色:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.12
import QtQml 2.12


Window {
    id:root
    width: 400
    height: 300
    visible: true
    title: qsTr("Hello World")

    Rectangle {
        width: 100; height: 100
        color: "green"

        MouseArea {
            anchors.fill: parent
            acceptedButtons: Qt.LeftButton | Qt.RightButton
            onClicked: {
                if (mouse.button == Qt.RightButton)
                    parent.color = 'blue';
                else
                    parent.color = 'red';
            }
        }
    }
}

坐标

        mouse.x 和mouse.y 是相对于父对象的坐标;如下

mapToGlobal

 将此项坐标系中的点 (x, y) 映射到全局坐标系

    Rectangle {
        x :100;y:100
        width: 100; height: 100
        color: "green"

        MouseArea {
            anchors.fill: parent
            acceptedButtons: Qt.LeftButton | Qt.RightButton
            onClicked: {
                console.log(mouse.x,mouse.y,mapToGlobal(mouse.x,mouse.y))

                if (mouse.button == Qt.RightButton)
                    parent.color = 'blue';
                else
                    parent.color = 'red';
            }
        }
    }

propagateComposedEvents

        此属性保存组合的鼠标事件是否会自动传播到与此 MouseArea 重叠但视觉堆叠顺序较低的其他 MouseArea。默认情况下,此属性为 false。
        MouseArea 包含几个组合事件:clicked、doubleClicked 和 pressAndHold。它们由基本的鼠标事件组成,例如按下,并且与基本事件相比可以以不同的方式传播。
        如果将propagateComposedEvents 设置为true,则组合事件将自动传播到场景中相同位置的其他MouseArea。每个事件以堆叠顺序传播到其下方的下一个启用的 MouseArea,向下传播此视觉层次结构,直到 MouseArea 接受该事件。与按下事件不同,如果没有处理程序存在,组合事件将不会被自动accept。
        例如,下面是一个黄色矩形,其中包含一个蓝色矩形。蓝色矩形是视觉堆叠顺序层次结构中最顶层的项目;它将在黄色矩形上方视觉呈现。由于蓝色矩形将propagateComposedEvents 设置为true,并且对于所有接收到的单击事件也将MouseEvent::accepted 设置为false,因此它接收到的任何单击事件都将传播到其下方黄色矩形的MouseArea。

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.12
import QtQml 2.12


Window {
    id:root
    width: 400
    height: 300
    visible: true
    title: qsTr("Hello World")

    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
                }
            }
        }
    }
}

        当mouse.accepted = ture表示已经处理了该事件,父对象将收不到onClicked 

drag

        被设置拖拽的item不要设置锚点,否则将无法拖拽

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值