Qt手势只抓取Pinch可靠地工作

时间:2015-11-30 23:41:43

标签: qt gesture gesture-recognition

我在Macbook Pro上玩Qt(v.5.5)手势,看看哪些功能可靠。

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

使用触摸板,我可以可靠地将捏手势作为手势事件进行回调,而不是其他类型。潘有时会工作,但只有一个口腔垫,并且只有在触摸板上有超过1个手指并且我没有设法滑动工作。我也尝试使用鼠标,这似乎也不起作用。

我无法在线找到解释这些手势是什么,以及/或如何触发它们的文档。

2 个答案:

答案 0 :(得分:1)

我不知道这是否会回答你的“问题”,但我想分享一些信息:手势似乎有很多混乱,包括我自己谦虚的知识,但我获得了一些更多的见解用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->accept())。

答案 1 :(得分:0)

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