From 3c26e37e5a93d08320474dc559256c013a0c7564 Mon Sep 17 00:00:00 2001 From: Jere Tuliniemi Date: Thu, 9 Oct 2025 12:12:25 +0300 Subject: [PATCH] Disable axis drag handler if not needed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pick-to: 6.9 Fixes: QTBUG-135931 Change-Id: Idbc3b9d04fbde1985f0209964d9d1c0a60bb2f2f Reviewed-by: Sami Varanka Reviewed-by: Tomi Korpipää (cherry picked from commit 2666c118ccff618ff3584bf3030f19c0ffec7c26) Reviewed-by: Qt Cherry-pick Bot --- src/graphs2d/qsgrenderer/axisrenderer.cpp | 38 ++++++++++++++++++----- src/graphs2d/qsgrenderer/axisrenderer_p.h | 2 ++ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/graphs2d/qsgrenderer/axisrenderer.cpp b/src/graphs2d/qsgrenderer/axisrenderer.cpp index 9164b3e4..1d326586 100644 --- a/src/graphs2d/qsgrenderer/axisrenderer.cpp +++ b/src/graphs2d/qsgrenderer/axisrenderer.cpp @@ -57,14 +57,6 @@ AxisRenderer::AxisRenderer(QQuickItem *parent) { m_graph = qobject_cast(parent); setFlag(QQuickItem::ItemHasContents); - - m_dragHandler = new QQuickDragHandler(this); - m_dragHandler->setDragThreshold(10); - m_dragHandler->setTarget(nullptr); - connect(m_dragHandler, &QQuickDragHandler::translationChanged, - this, &AxisRenderer::onTranslationChanged); - connect(m_dragHandler, &QQuickDragHandler::grabChanged, - this, &AxisRenderer::onGrabChanged); } AxisRenderer::~AxisRenderer() {} @@ -316,6 +308,14 @@ void AxisRenderer::onGrabChanged(QPointingDevice::GrabTransition transition, QEv void AxisRenderer::handlePolish() { + if (m_graph->panStyle() != QGraphsView::PanStyle::None + || m_graph->zoomStyle() != QGraphsView::ZoomStyle::None || m_graph->zoomAreaEnabled()) { + if (!m_dragHandler) + createDragHandler(); + } else if (m_dragHandler) { + deleteDragHandler(); + } + // See if series is horizontal, so axis should also switch places. bool vertical = true; if (m_graph->orientation() == Qt::Orientation::Horizontal) @@ -1575,6 +1575,28 @@ void AxisRenderer::updateDateTimeXAxisLabels(AxisProperties &ax, const QRectF re } } +void AxisRenderer::createDragHandler() +{ + m_dragHandler = new QQuickDragHandler(this); + m_dragHandler->setDragThreshold(10); + m_dragHandler->setTarget(nullptr); + connect(m_dragHandler, + &QQuickDragHandler::translationChanged, + this, + &AxisRenderer::onTranslationChanged); + connect(m_dragHandler, &QQuickDragHandler::grabChanged, this, &AxisRenderer::onGrabChanged); +} + +void AxisRenderer::deleteDragHandler() +{ + disconnect(m_dragHandler, + &QQuickDragHandler::translationChanged, + this, + &AxisRenderer::onTranslationChanged); + disconnect(m_dragHandler, &QQuickDragHandler::grabChanged, this, &AxisRenderer::onGrabChanged); + m_dragHandler->deleteLater(); +} + // Calculate suitable major step based on range double AxisRenderer::getValueStepsFromRange(double range) { diff --git a/src/graphs2d/qsgrenderer/axisrenderer_p.h b/src/graphs2d/qsgrenderer/axisrenderer_p.h index 87d70ee8..218dc01f 100644 --- a/src/graphs2d/qsgrenderer/axisrenderer_p.h +++ b/src/graphs2d/qsgrenderer/axisrenderer_p.h @@ -103,6 +103,8 @@ private: void updateDateTimeYAxisLabels(AxisProperties &ax, const QRectF rect); void updateDateTimeXAxisLabels(AxisProperties &ax, const QRectF rect); + void createDragHandler(); + void deleteDragHandler(); void onTranslationChanged(QVector2D delta); void onGrabChanged(QPointingDevice::GrabTransition transition, QEventPoint point);