----- TapHandler -----


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

 属性 
import QtQuick
    
Item {
    TapHandler {
        acceptedButtons: flags
            //激活该指针处理程序的鼠标按钮
            //可以用两种处理程序以不同方式对左右点击做出响应
            //例 一个 TapHandler 响应左键,一个 TapHandler 响应右键
        acceptedDevices: flags
            //激活该指针处理程序的指向设备类型
            //默认 PointerDevice.AllDevices,即所有设备
            //可以只响应触摸操作,也可以只响应鼠标操作
        acceptedModifiers: flags
            //如设置了该属性,则需按下给定的键盘修改器才能响应
            //默认 Qt.KeyboardModifierMask,即忽略修改键
            acceptedModifiers: Qt.NoModifier
                //不允许使用任何修改键
            acceptedModifiers: Qt.ShiftModifier
                //必须按键盘上的 Shift 键
            acceptedModifiers: Qt.ControlModifier
                //必须按键盘上的 Ctrl 键
            acceptedModifiers: Qt.AltModifier
                //必须按下键盘上的 Alt 键
            acceptedModifiers: Qt.MetaModifier
                //必须按下键盘上的 Meta 键
            acceptedModifiers: Qt.KeypadModifier
                //必须按下键盘上键
            acceptedModifiers: Qt.GroupSwitchModifier
                //必须按下键盘上的模式切换键
                //仅限 X11(除非在 Windows 上通过命令行参数激活)
            acceptedModifiers: Qt.KeyboardModifierMask
                //处理程序并不关心按下了哪些修改器
        acceptedPointerTypes: flags
            //激活该指针处理程序的指向工具类型(手指、触控笔、橡皮等)
        dragThreshold: int
            //必须拖动 eventPoint 才能被视为拖动手势的距离(以像素为单位)
        enabled: bool
            //如果PointerHandler 被禁用,它将拒绝所有事件,也不会发出任何信号
    
        exclusiveSignals: enumeration
            //确定singleTapped() 和doubleTapped() 信号的排他性
            exclusiveSignals: NotExclusive  //默认
                //singleTapped() 和doubleTapped() 分别在用户单击或双击时发出
            exclusiveSignals: SingleTap
                //只会响应 singleTapped() ,在用户单击时立即发出
            exclusiveSignals: DoubleTap
                //只会响应 doubleTapped() ,在用户双击时立即发出
            exclusiveSignals: (SingleTap | DoubleTap)
                //两个信号都会延迟到QStyleHints::mouseDoubleClickInterval() 才发出
                //但不能同时发出
                //其余信号,如tapped() 和tapCountChanged() 与此属性无关
        gesturePolicy: enumeration
              //识别轻按或长按手势的空间约束
        longPressThreshold: real
              //长按时长,单位 s 
        margin: real
              //项目外,也可响应事件,默认 0
        parent: Item
              //作用域,即使在 a 的子级也可指定 b 为父级
        target: Item
              //默认情况下,它与parent 相同
    }
}


 只读属性 
import QtQuick
    
Item {
    TapHandler {
        active: bool
            //是否动作
        point: handlerPoint
            //当前处理的事件点
            //若没有正在处理的点,该对象将重置为默认值(所有坐标均为 0)
        pressed: bool
            //等同于pressed && containsMouse
            //当前是否有任何acceptedButtons 被按下
        drag.active: bool
            //指定目标项目是否正在被拖动
        pressed: bool
            //是否点击或触摸
            //当eventPoint 被释放或违反策略时,按下将变为 false
        tapCount: int
            //在时间和空间限制内发生的被视为单次手势的点击次数
        timeHeld: real
            //被按下的点在不超过拖动阈值的情况下保持的时间,单位 s
    }
}


 信号 
import QtQuick
    
Item {
    TapHandler {
        canceled(eventPoint point)
        onCanceled:
            //如果此处理程序已经抓取了给定的point ,则当抓取被其他指针处理程序或项目窃取时,会发出此信号
    
        tapped(eventPoint eventPoint, Qt::MouseButton button)
        onTapped:
            //点击时发出
            //超过长按时间则不会发出
    
        doubleTapped(eventPoint eventPoint, Qt::MouseButton button)
        onDoubleTapped:
            //双击时发出
    
        grabChanged(PointerDevice::GrabTransition transition, eventPoint point)
        onGrabChanged:
            //当抓取点发生与该处理程序相关的某种变化时,就会发出该信号
    
        longPressed()
        onLongPressed:
            //长按时发出
    
        singleTapped(eventPoint eventPoint, Qt::MouseButton button)
        onSingleTapped:
            //当parent 项目被点击一次时,就会发出该信号
            //超过QStyleHints::mouseDoubleClickInterval 的时间后,可以再次点击
            //即快速频繁点击时只触发一次
    }
}