我尝试了来自http://doc.qt.digia.com/4.6/gestures-imagegestures.html的“图像手势示例” 。在此示例中,您只有 3 个手势:PanGesture、PinchGesture 和 SwipeGesture。但 Qt 提供了 5 种手势:
- 点击手势
- 点击并按住手势
- 泛手势
- 捏手势
- 滑动手势
为了识别所有 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 无法识别?这些手势同样实现为三个可识别的手势(平移、捏合和轻敲)。为什么它不起作用?
我提前感谢您的帮助