【问题标题】:Qt Gesture Grabbing only Pinch works reliablyQt Gesture Grabbing only Pinch 工作可靠
【发布时间】:2016-03-04 18:24:01
【问题描述】:

我正在 Macbook Pro 上使用 Qt (v. 5.5) 手势来看看什么是可靠的。

    TapGesture        = 1,
    TapAndHoldGesture = 2,
    PanGesture        = 3,
    PinchGesture      = 4,
    SwipeGesture      = 5,

使用触摸板,我可以可靠地让捏合手势作为手势事件回调,但其他类型则不行。潘有时可以工作,但只能使用口垫,并且只有在触摸板上有超过 1 个手指并且我没有设法让滑动工作时。我也试过用鼠标,好像也没用。

我找不到解释这些手势是什么和/或如何触发它们的在线文档。

【问题讨论】:

  • 在 Android 上,我发现滑动手势不起作用。经过一番谷歌搜索后,我发现其他一些人也发现了同样的东西,解决方案是创建一个自定义手势识别器。这就是我最终做的事情,而且效果很好,但是必须编写自己的识别器似乎很荒谬。我似乎记得有一些 cmets 建议滑动确实有效,但前提是你使用 3 个手指!
  • 是的,我也读过。我现在正在玩我自己的自定义滑动识别器。

标签: qt gesture gesture-recognition


【解决方案1】:

QGestureEvent 提供活动和非活动手势列表,而不仅仅是单个手势事件。如果您抓取多个事件,请不要使用 if/else 逻辑,而是确保处理在单个 QGestureEvent 中接收到的所有事件

【讨论】:

    【解决方案2】:

    我不知道这是否会回答您的“问题”,但我想分享一些信息:手势似乎有很多困惑,包括我自己的卑微知识,但我获得了更多见解使用this nice answer here 进入它。它提到了一个我不知道的重要方面:接受事件。我最终这样实现它:

    bool YOURWIDGET::event(QEvent *event)
    {
        if (event->type() == QEvent::Gesture)
        {
            return gestureEvent(static_cast<QGestureEvent*>(event));
        }
        else if (event->type() == QEvent::GestureOverride)
        {
            event->accept();
        }
        return QGraphicsView::event(event);
    }
    
    bool YOURWIDGET::gestureEvent(QGestureEvent *event)
    {
        qDebug() << event;
        return true;
    }
    

    事实证明,PanEventPinchEvent 在我的情况下是并发的。然而,简单的TapEvent 与我想象的PanEvent 非常相似(按住并移动某些东西)。也确实有一个SwipeEvent,只有三个手指。 所有这些都适用于 Windows 10

    对于您自己的平台,此代码至少应该有助于识别最能准确描述您想要获取的行为的事件类型(即使您可能不得不再次停用event-&gt;accept())。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多