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);
}
}
}