01 bool PinchWidget::event(QEvent *event) 02 { 03 if(event‑>type() == QEvent::Gesture) 04 return gestureEvent(static_cast(event)); 05 return QWidget::event(event); 06 } 07 08 bool PinchWidget::gestureEvent(QGestureEvent *event) 09 { 10 if(QGesture *pinch = event->gesture(Qt::PinchGesture)) 11 { 12 pinchGesture(static_cast(pinch)); 13 return true; 14 } 15 return false; 16 } 17 18 void PinchWidget::pinchGesture(QPinchGesture *gesture) 19 { 20 QPinchGesture::ChangeFlags flags = gesture->changeFlags(); 21 if(flags & QPinchGesture::RotationAngleChanged) 22 { 23 qreal value = gesture->rotationAngle(); 24 qreal lastValue = gesture‑>lastRotationAngle(); 25 rotationAngle += value - lastValue; 26 } 27 if(flags & QPinchGesture::ScaleFactorChanged) 28 { 29 currentScaleFactor = gesture->scaleFactor(); 30 } 31 if(gesture->state() == Qt::GestureFinished) 32 { 33 scaleFactor *= currentScaleFactor; 34 currentScaleFactor = 1; 35 } 36 update(); 37 }