Qt,手势.无法识别TapAndHold和Swipe

Ali*_*oll 10 qt gesture

我在http://doc.qt.digia.com/4.6/gestures-imagegestures.html上尝试了"Image Gestures Example" .在本例中,您只有3个手势:PanGesture,PinchGesture和SwipeGesture.但是Qt提供了5个手势:

  • TapGesture
  • TapAndHoldGesture
  • PanGesture
  • PinchGesture
  • SwipeGesture

为了识别我们需要写入ImageWidget-Constructor的所有5个手势:

 grabGesture(Qt::TapGesture);
 grabGesture(Qt::TapAndHoldGesture);
 grabGesture(Qt::PanGesture);
 grabGesture(Qt::PinchGesture);
 grabGesture(Qt::SwipeGesture);
Run Code Online (Sandbox Code Playgroud)

我还添加了方法gestureEvent()

bool ImageWidget::gestureEvent(QGestureEvent *event)
 {
     if (QGesture *swipe = event->gesture(Qt::SwipeGesture))
         swipeTriggered(static_cast<QSwipeGesture *>(swipe));
     else if (QGesture *pan = event->gesture(Qt::PanGesture))
         panTriggered(static_cast<QPanGesture *>(pan));
     if (QGesture *pinch = event->gesture(Qt::PinchGesture))
         pinchTriggered(static_cast<QPinchGesture *>(pinch));
     if (QGesture *tap = event->gesture(Qt::TapGesture))
         tapTriggered(static_cast<QTapGesture *>(tap));
     if (QGesture *tapandhold = event->gesture(Qt::TapAndHoldGesture))
     {
         tapandholdTriggered(static_cast<QTapAndHoldGesture *>(tapandhold));
      }
     return true;
 }
Run Code Online (Sandbox Code Playgroud)

并写下缺少的方法

void ImageWidget::tapTriggered(QTapGesture *gesture)
 {
    qDebug() << "TAP" << gesture->position();
 }

 void ImageWidget::tapandholdTriggered(QTapAndHoldGesture *tapandhold)
 {
     qDebug() << "TAPANDHOLD";
 }
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,为什么手势Swipe和TapAndHold无法识别?这些手势同样实现为可识别的三个手势(平移,捏合和敲击).为什么它不起作用?

谢谢你提前帮忙

boo*_*chk 0

尝试更新版本的 Qt(并且您没有提及您的操作系统或设备。)我不知道更新版本会更好,但我知道大约一年前,整个堆栈(X11 事件,设备驱动程序、操作系统支持等)不断变化且不完整。例如,我记得,在我尝试的时候,只有 Windows 上的 Qt 中的手势可以工作,而 Linux/Ubuntu(来自 Canonical)正在进行中。