QGesture gesturedetector

1.第一步使能触摸事件,这允许我们接收触摸开始事件。

MyWebView::MyWebView(QGraphicsItem *parent) :QGraphicsWebView(parent)
{
setAcceptTouchEvents(true);//设置这个为了接收触摸事件

grabGesture(Qt::PinchGesture);//调用这个函数pinch(捏)手势被允许,这将使MyWebView作为QGestureEvents的目标。

}

2.标准事件的处理需要通过重新实现QGraphicsWebView'ssceneEvent(QEvent*event).

bool MyWebView::sceneEvent(QEvent*event)
{
switch(event->type()){
case QEvent::TouchBegin:
//accepting touch begin allows us toget touch updates
return true;
break;
case QEvent::Gesture:
return gestureEvent(static_cast<QGestureEvent*>(event));
break;
default:
return QGraphicsWebView::sceneEvent(event);
}
}

3.在你接收额外的触摸更新和触摸结束事件,开始触摸事件必须被接受。这是需要手势识别工作。当手势事件被接收,我们把它传递给gestreEvent()处理程序检查手势类型,并转发给pinchGesture处理程序。当你想使用多个手势的时候,使用gestureEvent处理程序非常有用。

boolMyWebView::gestureEvent(QGestureEvent*event)
{
if (QGesture*pinch =event->gesture(Qt::PinchGesture)){
pinchTriggered(static_cas t<QPinchGesture *>(pinch));
}
return true;
}

4。最后一步是根据用户输入缩放当前页,这是个不错的主意。限制缩放因素包括用户很少用到的缩放非常大和非常小的级别。

void MyWebView::pinchTriggered(QPinchGesture*gesture)
{
QPinchGesture::ChangeFlags changeFlags =gesture->changeFlags();
if (changeFlags& QPinchGesture::ScaleFactorChanged) {
qrealvalue = gesture->scaleFactor();
qreal zoom =value*zoomFactor();
if(zoom< 2 &&zoom > 0.5){
qDebug()<<"zooming";
setZoomFactor(zoom);
}
}
}

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/269326.html

更多阅读

GestureDetector类及其用法 gesturedetector 无效

当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等。一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Viewv,MotionEventevent)方法,我们可以处理一些touch事件,但是这个方法太过简单,如

声明:《QGesture gesturedetector》为网友旧巷遇见你和他分享!如侵犯到您的合法权益请联系我们删除