QGesture

xiaoxiao2021-02-28  82

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

转载请注明原文地址: https://www.6miu.com/read-57372.html

最新回复(0)