----- MouseArea -----


https://doc.qt.io/qt-6.9/zh/qml-qtquick-mousearea.html

 属性 
import QtQuick
    
Item {
    MouseArea {
        anchors.fill: parent
    
        //鼠标区域会做出反应的鼠标按钮
        acceptedButtons: Qt::MouseButtons
            acceptedButtons: Qt.NoButton
                //无
            acceptedButtons: Qt.AllButtons
                //所有按钮
            acceptedButtons: Qt.LeftButton  //默认
            acceptedButtons: Qt.RightButton
            acceptedButtons: Qt.MiddleButton
                //中键
            acceptedButtons: Qt.BackButton
                //后退(侧键)
            acceptedButtons: Qt.LeftButton | Qt.RightButton
                //多个按钮用 或| 标志
            ......
    
        //drag group 拖动
        drag.target: Item
            //拖动目标 id
        drag.axis: enumeration
            drag.axis: Drag.XAxis
                //只能水平拖动
            drag.axis: Drag.YAxis
                //只能垂直拖动
            drag.axis: Drag.XAndYAxis
                //水平垂直拖动(默认)
        drag.minimumX(Y): real
            //拖动的最小距离
        drag.maximumX(Y): real
            //拖动的最大距离
        drag.filterChildren: bool
            //覆盖后代的 MouseArea
            //当前MouseArea可以用来拖动,后代MouseArea用来点击
        drag.smoothed: bool
            //true,只有在拖动操作开始后才会移动目标
            //false,目标将直接移动到当前鼠标位置
            //设置为false,可解决快速移动鼠标漂移
            //默认 true
        drag.threshold: real
            //决定拖动操作何时开始的阈值(以像素为单位)
    
        enabled: bool
              //项目是否接受鼠标事件
              //不等同于 Item.enabled
              //只影响鼠标事件,其效果不会传播给子项目
              //默认 true
        hoverEnabled: bool
              //是否处理悬停事件
              //默认 false
        pressAndHoldInterval: int
              //重置pressAndHold 发出前的经过时间,ms
        preventStealing: bool
              //确定鼠标事件是否可以从MouseArea 中窃取
              //默认 false
        propagateComposedEvents: bool
              //组成的鼠标事件是否会自动传播到与该MouseArea 重叠但在视觉堆叠顺序中较低的其他 MouseAreas
              //默认 false
        scrollGestureEnabled: bool
              //控制MouseArea 是否响应非鼠标设备的滚动手势
              //默认 true
    }
}


 只读属性 
import QtQuick
    
Item {
    MouseArea {
        anchors.fill: parent
    
        mouseX(Y) : real
            //鼠标光标坐标
        containsMouse: bool
            //鼠标当前是否位于鼠标区域内
        containsPress: bool
            //等同于pressed && containsMouse
            //当前是否有任何acceptedButtons 被按下
        drag.active: bool
            //指定目标项目是否正在被拖动
        pressed: bool
            //显示 acceptedButtons 当前是否被按下
        pressedButtons: MouseButtons
            //显示当前按下的鼠标按钮
            //该属性仅处理acceptedButtons 中指定的按钮
            //包含的按位组合
                Qt.LeftButton
                Qt.RightButton
                Qt.MiddleButton
    }
}


 信号 
import QtQuick
    
Item {
    MouseArea {
        anchors.fill: parent
    
        canceled()
        onCanceled:
            //鼠标事件被取消,因为另一个项目抢走了鼠标事件处理权时,就会发出该信号
    
        clicked(MouseEvent mouse)
        onClicked:
            //点击时发出,点击被定义为按下后释放
            //mouse 参数提供了有关单击的信息
            //除非propagateComposedEvents 属性为true,
            //否则更改mouse 参数的accepted 属性不会有任何影响
    
        doubleClicked(MouseEvent mouse)
        onDoubleClicked:
            //双击时发出,点击被定义为按下后释放
            //mouse 参数提供了有关单击的信息
            //如果mouse 参数的accepted 属性设置为 false,
            //第二次点击时将发出按下/释放/点击信号
            //否则,这些信号将被抑制
            //accepted 属性默认 true
    
        entered()
        onEntered:
            //信号在鼠标进入鼠标区域时发出
            //默认只有当前按下按钮时才会发出该信号
            //hoverEnabled 设置为 true,即使没有按下也会发出
    
        exited()
        onExited:
            //鼠标退出鼠标区域时发出
            //默认只有当前按下按钮时才会发出该信号
            //hoverEnabled 设置为 true,即使没有按下也会发出
    
        positionChanged(MouseEvent mouse)
        onPositionChanged:
            //鼠标位置发生变化时发出
            //默认只有当前按下按钮时才会发出该信号
            //hoverEnabled 设置为 true,即使没有按下也会发出
            //处理此信号时,更改mouse 参数的accepted 属性不会产生任何影响
    
        pressAndHold(MouseEvent mouse)
        onPressAndHold:
            //长按时(当前为 800ms)会发出该信号
            //处理该信号时,除非propagateComposedEvents 属性为true,
            //否则更改mouse 参数的accepted 属性不会有任何影响
    
        pressed(MouseEvent mouse)
        onPressed:
            //按钮按下时发出
    
        released(MouseEvent mouse)
        onReleased:
            //释放按钮时发出
    
        wheel(WheelEvent wheel)
        onWheel:
            //该信号是对鼠标滚轮和触控板滚动手势的响应
    }
}