You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows平台QML中如何区分WheelEvent来自鼠标滚轮还是触控板

在Windows QML中区分鼠标滚轮与触控板的WheelEvent

在Windows系统下没法靠pixelDelta判断滚轮事件来源,不过可以通过两个特征来区分:

  • angleDelta的步长差异:Windows标准鼠标滚轮的angleDelta值是±120的整数倍(系统默认滚轮步长);而触控板滚动时,angleDelta会是更小的、非120倍数的连续数值。
  • 事件的phase属性:触控板滚动会触发完整阶段事件——WheelEvent.Begin(开始滚动)、WheelEvent.Update(滚动中)、WheelEvent.End(结束滚动);鼠标滚轮单次滚动触发的事件,phase通常是WheelEvent.NoPhase。

结合这两个特征,你可以修改代码里的isTrackPad判断逻辑,示例如下:

onWheel: {
    var horizontal = false;
    var delta = 0;
    var isTrackPad = false;
    
    // 判断是否为触控板的核心逻辑
    var isNonStandardStep = (Math.abs(wheel.angleDelta.x) % 120 !== 0) || (Math.abs(wheel.angleDelta.y) % 120 !== 0);
    var hasScrollPhase = wheel.phase !== WheelEvent.NoPhase;
    isTrackPad = isNonStandardStep || hasScrollPhase;

    if (Math.abs(wheel.angleDelta.x) > Math.abs(wheel.angleDelta.y)) {
        delta = wheel.angleDelta.x;
        horizontal = true;
    } else {
        delta = wheel.angleDelta.y;
    }
    
    if ((isTrackPad && horizontal) || (!isTrackPad && wheel.modifiers === xxx.ScrollModifiersH)) {
        // 你的业务逻辑
    }
}

注意:部分特殊鼠标可能被修改为非120步长,这时候结合phase判断会更准确;如果用户调整了系统鼠标滚轮步长,步长判断可能失效,建议优先参考phase属性。

内容的提问来源于stack exchange,提问作者isudfv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:42:47