1.第一步使能触摸事件,这允许我们接收触摸开始事件。
MyWebView::MyWebView(QGraphicsItem *parent) :QGraphicsWebView(parent) { setAcceptTouchEvents(true); //设置这个为了接收触摸事件
grabGesture(Qt::PinchGesture);//调用这个函数pinch(捏)手势被允许,这将使MyWebView作为QGestureEvents的目标。
}
2.标准事件的处理需要通过重新实现QGraphicsWebView's sceneEvent(QEvent *event).
bool MyWebView ::sceneEvent(QEvent *event ) { switch(event ->type ()){ case QEvent ::TouchBegin: //accepting touch begin allows us to get touch updates return true; break; case QEvent ::Gesture: return gestureEvent (static_cast<QGestureEvent *>(event )); break; default: return QGraphicsWebView ::sceneEvent(event ); } }
3.在你接收额外的触摸更新和触摸结束事件,开始触摸事件必须被接受。这是需要手势识别工作。当手势事件被接收,我们把它传递给gestreEvent()处理程序检查手势类型,并转发给pinchGesture处理程序。当你想使用多个手势的时候,使用gestureEvent处理程序非常有用。
bool MyWebView ::gestureEvent (QGestureEvent *event ) { if (QGesture *pinch = event ->gesture (Qt ::PinchGesture)){ pinchTriggered (static_cast<QPinchGesture *>(pinch )); } return true; }
4。最后一步是根据用户输入缩放当前页,这是个不错的主意。限制缩放因素包括用户很少用到的缩放非常大和非常小的级别。
void MyWebView ::pinchTriggered(QPinchGesture *gesture ) { QPinchGesture ::ChangeFlags changeFlags = gesture ->changeFlags (); if (changeFlags & QPinchGesture ::ScaleFactorChanged) { qreal value = gesture ->scaleFactor (); qreal zoom = value *zoomFactor (); if(zoom < 2 && zoom > 0.5){ qDebug ()<< "zooming"; setZoomFactor (zoom ); } } }
http://blog.csdn.net/firefox0123/article/details/40823559