diff --git a/libimageviewer/viewpanel/scen/imagegraphicsview.cpp b/libimageviewer/viewpanel/scen/imagegraphicsview.cpp index 7b38f8a8..739bad88 100644 --- a/libimageviewer/viewpanel/scen/imagegraphicsview.cpp +++ b/libimageviewer/viewpanel/scen/imagegraphicsview.cpp @@ -1046,7 +1046,8 @@ void LibImageGraphicsView::mouseReleaseEvent(QMouseEvent *e) } } } - if ((QDateTime::currentMSecsSinceEpoch() - m_clickTime) < 200 && abs(xpos) < 50) { + if ((QDateTime::currentMSecsSinceEpoch() - m_clickTime) < 200 && abs(xpos) < 50 && + (QDateTime::currentMSecsSinceEpoch() - m_lastWheelOrGestureTime) >= 300) { m_clickTime = QDateTime::currentMSecsSinceEpoch(); emit sigClicked(); } @@ -1062,6 +1063,12 @@ void LibImageGraphicsView::mouseReleaseEvent(QMouseEvent *e) void LibImageGraphicsView::mousePressEvent(QMouseEvent *e) { + // 过滤触摸板/触摸屏缩放手势结束后短时间内的合成点击,避免误触发查看模式切换 + if (e->source() == Qt::MouseEventSynthesizedByQt && + (QDateTime::currentMSecsSinceEpoch() - m_lastWheelOrGestureTime) < 300) { + e->accept(); + return; + } #ifdef tablet_PC m_press = true; #endif @@ -1353,6 +1360,7 @@ void LibImageGraphicsView::pinchTriggered(QPinchGesture *gesture) if (gesture->state() == Qt::GestureFinished) { m_isFirstPinch = false; + m_lastWheelOrGestureTime = QDateTime::currentMSecsSinceEpoch(); gesture->setCenterPoint(m_centerPoint); return; } @@ -1484,6 +1492,9 @@ void LibImageGraphicsView::hideSpinner() void LibImageGraphicsView::wheelEvent(QWheelEvent *event) { + // 记录滚轮时间戳,用于过滤手势结束后短时间内的合成点击 + m_lastWheelOrGestureTime = QDateTime::currentMSecsSinceEpoch(); + // 加载过程不可缩放 if (m_spinner && m_spinner->isVisible()) { return; diff --git a/libimageviewer/viewpanel/scen/imagegraphicsview.h b/libimageviewer/viewpanel/scen/imagegraphicsview.h index 699bb957..ec035a5f 100644 --- a/libimageviewer/viewpanel/scen/imagegraphicsview.h +++ b/libimageviewer/viewpanel/scen/imagegraphicsview.h @@ -249,6 +249,8 @@ private slots: //单击时间 qint64 m_clickTime{0}; + //最近一次滚轮/缩放手势的时间戳,用于过滤手势结束后合成的点击 + qint64 m_lastWheelOrGestureTime{0}; }; #endif // IMAGEVIEW_H