From 9d01f938f51019efd64bb84f50ed9e7501f2dbce Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Mon, 21 Sep 2020 11:31:37 +0200 Subject: [PATCH] using effectiveSubcontrol when setting the position of the handle --- src/controls/QskSlider.cpp | 12 +++++++++--- src/controls/QskSlider.h | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/controls/QskSlider.cpp b/src/controls/QskSlider.cpp index 893644d6..fcf1915e 100644 --- a/src/controls/QskSlider.cpp +++ b/src/controls/QskSlider.cpp @@ -50,8 +50,6 @@ QskSlider::QskSlider( Qt::Orientation orientation, QQuickItem* parent ) else initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum ); - setMetric( QskSlider::Handle | QskAspect::Position, valueAsRatio() ); - connect( this, &QskSlider::boundariesChanged, [ this ]() { updatePosition(); } ); connect( this, &QskSlider::valueChanged, [ this ]() { updatePosition(); } ); } @@ -105,6 +103,14 @@ bool QskSlider::isTracking() const return m_data->tracking; } +void QskSlider::aboutToShow() +{ + const auto subControl = effectiveSubcontrol( QskSlider::Handle ); + setMetric( subControl | QskAspect::Position, valueAsRatio() ); + + Inherited::aboutToShow(); +} + QSizeF QskSlider::contentsSizeHint( Qt::SizeHint which, const QSizeF& ) const { @@ -223,7 +229,7 @@ void QskSlider::updatePosition() setSkinStateFlag( QskSlider::Minimum, value() <= minimum() ); setSkinStateFlag( QskSlider::Maximum, value() >= maximum() ); - const Aspect aspect = QskSlider::Handle | Position | Metric; + const auto aspect = effectiveSubcontrol( QskSlider::Handle ) | Position | Metric; const auto hint = animation( aspect | skinState() ); const qreal pos = valueAsRatio(); diff --git a/src/controls/QskSlider.h b/src/controls/QskSlider.h index 114c3ae4..bd4da9dd 100644 --- a/src/controls/QskSlider.h +++ b/src/controls/QskSlider.h @@ -58,6 +58,8 @@ class QSK_EXPORT QskSlider : public QskBoundedValueInput QSizeF handleSize() const; QRectF handleRect() const; + void aboutToShow() override; + private: void updatePosition();