12

http://doc.qt.digia.com/4.6/gestures-imagegestures.htmlから「画像ジェスチャーの例」を試しました。この例では、PanGesture、PinchGesture、SwipeGesture の 3 つのジェスチャしかありません。しかし、Qt は 5 つのジェスチャーを提供します。

  • タップジェスチャー
  • TapAndHoldGesture
  • パンジェスチャ
  • ピンチジェスチャー
  • スワイプジェスチャー

5 つのジェスチャーすべてを認識するために、ImageWidget-Constructor に書き込む必要があります。

 grabGesture(Qt::TapGesture);
 grabGesture(Qt::TapAndHoldGesture);
 grabGesture(Qt::PanGesture);
 grabGesture(Qt::PinchGesture);
 grabGesture(Qt::SwipeGesture);

メソッド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;
 }

不足しているメソッドを次のように記述します

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

 void ImageWidget::tapandholdTriggered(QTapAndHoldGesture *tapandhold)
 {
     qDebug() << "TAPANDHOLD";
 }

私の質問は、なぜジェスチャ Swipe と TapAndHold が認識されないのですか? これらのジェスチャは、認識される 3 つのジェスチャ (パン、ピンチ、タップ) として同様に実装されます。うまくいかないのはなぜですか?

助けてくれてありがとう

4

2 に答える 2