Disable axis drag handler if not needed

Pick-to: 6.9
Fixes: QTBUG-135931
Change-Id: Idbc3b9d04fbde1985f0209964d9d1c0a60bb2f2f
Reviewed-by: Sami Varanka <sami.varanka@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
(cherry picked from commit 2666c118cc)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Jere Tuliniemi 2025-10-09 12:12:25 +03:00 committed by Qt Cherry-pick Bot
parent 10acb96af4
commit 3c26e37e5a
2 changed files with 32 additions and 8 deletions

View File

@ -57,14 +57,6 @@ AxisRenderer::AxisRenderer(QQuickItem *parent)
{
m_graph = qobject_cast<QGraphsView *>(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)
{

View File

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