feat: 增加二指触屏功能
Description: 增加二指触屏功能 Log: 增加二指触屏功能 Change-Id: Ib96e7082ebf651708992357bcbe064048b830ce2
This commit is contained in:
parent
d02ef1d18a
commit
9d1d8aafc1
|
@ -10,6 +10,8 @@
|
|||
#include <QThreadPool>
|
||||
#include <qmath.h>
|
||||
#include <QObject>
|
||||
#include <QGestureEvent>
|
||||
#include <QPinchGesture>
|
||||
|
||||
const qreal MAX_SCALE_FACTOR = 20.0;
|
||||
const qreal MIN_SCALE_FACTOR = 0.029;
|
||||
|
@ -23,6 +25,8 @@ ImageView::ImageView(QWidget *parent):
|
|||
setScene(scene);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
this->grabGesture(Qt::PinchGesture);
|
||||
setAttribute(Qt::WA_AcceptTouchEvents);
|
||||
}
|
||||
|
||||
void ImageView::openImage(const QString &path)
|
||||
|
@ -192,6 +196,23 @@ void ImageView::mouseMoveEvent(QMouseEvent *event)
|
|||
return QGraphicsView::mouseMoveEvent(event);
|
||||
}
|
||||
|
||||
bool ImageView::event(QEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::Gesture) {
|
||||
return gestureEvent(static_cast<QGestureEvent *>(event));
|
||||
}
|
||||
return QGraphicsView::event(event);
|
||||
}
|
||||
|
||||
bool ImageView::gestureEvent(QGestureEvent *event)
|
||||
{
|
||||
// if (QGesture *swipe = event->gesture(Qt::SwipeGesture)) //滑动逻辑
|
||||
// swipeTriggered(static_cast<QSwipeGesture *>(swipe));
|
||||
if (QGesture *pinch = event->gesture(Qt::PinchGesture))//双指捏合
|
||||
pinchTriggered(static_cast<QPinchGesture *>(pinch));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const QImage ImageView::image()
|
||||
{
|
||||
|
@ -215,6 +236,27 @@ void ImageView::wheelEvent(QWheelEvent *event)
|
|||
|
||||
event->accept();
|
||||
}
|
||||
|
||||
void ImageView::handleGestureEvent(QGestureEvent *gesture)
|
||||
{
|
||||
qDebug() << "------" << __FUNCTION__ << "";
|
||||
if (QGesture *pinch = gesture->gesture(Qt::PinchGesture))
|
||||
pinchTriggered(static_cast<QPinchGesture *>(pinch));
|
||||
}
|
||||
|
||||
void ImageView::pinchTriggered(QPinchGesture *gesture)
|
||||
{
|
||||
qDebug() << "------" << __FUNCTION__ << "";
|
||||
QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags();
|
||||
//缩放手势
|
||||
if (changeFlags & QPinchGesture::ScaleFactorChanged) {
|
||||
QPoint pos = mapFromGlobal(gesture->centerPoint().toPoint());
|
||||
if (abs(gesture->scaleFactor() - 1) > 0.006) {
|
||||
qDebug() << "scaleFactor" << gesture->scaleFactor();
|
||||
scaleAtPoint(pos, gesture->scaleFactor());
|
||||
}
|
||||
}
|
||||
}
|
||||
void ImageView::scaleAtPoint(QPoint pos, qreal factor)
|
||||
{
|
||||
// Remember zoom anchor point.
|
||||
|
@ -264,3 +306,4 @@ void ImageView::setScaleValue(qreal v)
|
|||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
#include <QGraphicsView>
|
||||
|
||||
class QGraphicsPixmapItem;
|
||||
|
||||
|
||||
class QGestureEvent;
|
||||
class QPinchGesture;
|
||||
|
||||
class ImageView : public QGraphicsView
|
||||
{
|
||||
|
@ -27,6 +27,8 @@ public:
|
|||
void autoFit();
|
||||
//鼠标移动事件
|
||||
void mouseMoveEvent(QMouseEvent *event) override;
|
||||
bool event(QEvent *event)override;
|
||||
bool gestureEvent(QGestureEvent *event);
|
||||
|
||||
//返回当前图片img
|
||||
const QImage image();
|
||||
|
@ -50,7 +52,9 @@ public slots:
|
|||
//鼠标滚轮事件
|
||||
void wheelEvent(QWheelEvent *event) override;
|
||||
protected:
|
||||
|
||||
//二指捏合功能的触屏事件
|
||||
void handleGestureEvent(QGestureEvent *gesture);
|
||||
void pinchTriggered(QPinchGesture *gesture);
|
||||
|
||||
private:
|
||||
QString m_currentPath;//当前图片路径
|
||||
|
|
Loading…
Reference in New Issue
Block a user