diff options
Diffstat (limited to 'src/templates/qquickslider.cpp')
-rw-r--r-- | src/templates/qquickslider.cpp | 138 |
1 files changed, 81 insertions, 57 deletions
diff --git a/src/templates/qquickslider.cpp b/src/templates/qquickslider.cpp index fac8fb50..395725eb 100644 --- a/src/templates/qquickslider.cpp +++ b/src/templates/qquickslider.cpp @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE \instantiates QQuickSlider \inqmlmodule Qt.labs.controls \ingroup qtlabscontrols-input - \brief A slider control. + \brief Selects a value by sliding a handle along a track. \image qtlabscontrols-slider.gif @@ -80,7 +80,7 @@ class QQuickSliderPrivate : public QQuickControlPrivate public: QQuickSliderPrivate() : from(0), to(1), value(0), position(0), stepSize(0), pressed(false), orientation(Qt::Horizontal), snapMode(QQuickSlider::NoSnap), - handle(Q_NULLPTR), track(Q_NULLPTR) + handle(nullptr), track(nullptr) { } @@ -147,11 +147,12 @@ void QQuickSliderPrivate::setPosition(qreal pos) { Q_Q(QQuickSlider); pos = qBound<qreal>(0.0, pos, 1.0); - if (!qFuzzyCompare(position, pos)) { - position = pos; - emit q->positionChanged(); - emit q->visualPositionChanged(); - } + if (qFuzzyCompare(position, pos)) + return; + + position = pos; + emit q->positionChanged(); + emit q->visualPositionChanged(); } void QQuickSliderPrivate::updatePosition() @@ -185,13 +186,14 @@ qreal QQuickSlider::from() const void QQuickSlider::setFrom(qreal from) { Q_D(QQuickSlider); - if (!qFuzzyCompare(d->from, from)) { - d->from = from; - emit fromChanged(); - if (isComponentComplete()) { - setValue(d->value); - d->updatePosition(); - } + if (qFuzzyCompare(d->from, from)) + return; + + d->from = from; + emit fromChanged(); + if (isComponentComplete()) { + setValue(d->value); + d->updatePosition(); } } @@ -211,13 +213,14 @@ qreal QQuickSlider::to() const void QQuickSlider::setTo(qreal to) { Q_D(QQuickSlider); - if (!qFuzzyCompare(d->to, to)) { - d->to = to; - emit toChanged(); - if (isComponentComplete()) { - setValue(d->value); - d->updatePosition(); - } + if (qFuzzyCompare(d->to, to)) + return; + + d->to = to; + emit toChanged(); + if (isComponentComplete()) { + setValue(d->value); + d->updatePosition(); } } @@ -244,11 +247,12 @@ void QQuickSlider::setValue(qreal value) if (isComponentComplete()) value = d->from > d->to ? qBound(d->to, value, d->from) : qBound(d->from, value, d->to); - if (!qFuzzyCompare(d->value, value)) { - d->value = value; - d->updatePosition(); - emit valueChanged(); - } + if (qFuzzyCompare(d->value, value)) + return; + + d->value = value; + d->updatePosition(); + emit valueChanged(); } /*! @@ -307,10 +311,11 @@ qreal QQuickSlider::stepSize() const void QQuickSlider::setStepSize(qreal step) { Q_D(QQuickSlider); - if (!qFuzzyCompare(d->stepSize, step)) { - d->stepSize = step; - emit stepSizeChanged(); - } + if (qFuzzyCompare(d->stepSize, step)) + return; + + d->stepSize = step; + emit stepSizeChanged(); } /*! @@ -334,10 +339,11 @@ QQuickSlider::SnapMode QQuickSlider::snapMode() const void QQuickSlider::setSnapMode(SnapMode mode) { Q_D(QQuickSlider); - if (d->snapMode != mode) { - d->snapMode = mode; - emit snapModeChanged(); - } + if (d->snapMode == mode) + return; + + d->snapMode = mode; + emit snapModeChanged(); } /*! @@ -354,11 +360,12 @@ bool QQuickSlider::isPressed() const void QQuickSlider::setPressed(bool pressed) { Q_D(QQuickSlider); - if (d->pressed != pressed) { - d->pressed = pressed; - setAccessibleProperty("pressed", pressed); - emit pressedChanged(); - } + if (d->pressed == pressed) + return; + + d->pressed = pressed; + setAccessibleProperty("pressed", pressed); + emit pressedChanged(); } /*! @@ -379,10 +386,11 @@ Qt::Orientation QQuickSlider::orientation() const void QQuickSlider::setOrientation(Qt::Orientation orientation) { Q_D(QQuickSlider); - if (d->orientation != orientation) { - d->orientation = orientation; - emit orientationChanged(); - } + if (d->orientation == orientation) + return; + + d->orientation = orientation; + emit orientationChanged(); } /*! @@ -401,13 +409,14 @@ QQuickItem *QQuickSlider::handle() const void QQuickSlider::setHandle(QQuickItem *handle) { Q_D(QQuickSlider); - if (d->handle != handle) { - delete d->handle; - d->handle = handle; - if (handle && !handle->parentItem()) - handle->setParentItem(this); - emit handleChanged(); - } + if (d->handle == handle) + return; + + delete d->handle; + d->handle = handle; + if (handle && !handle->parentItem()) + handle->setParentItem(this); + emit handleChanged(); } /*! @@ -426,13 +435,14 @@ QQuickItem *QQuickSlider::track() const void QQuickSlider::setTrack(QQuickItem *track) { Q_D(QQuickSlider); - if (d->track != track) { - delete d->track; - d->track = track; - if (track && !track->parentItem()) - track->setParentItem(this); - emit trackChanged(); - } + if (d->track == track) + return; + + delete d->track; + d->track = track; + if (track && !track->parentItem()) + track->setParentItem(this); + emit trackChanged(); } /*! @@ -555,6 +565,20 @@ void QQuickSlider::mouseUngrabEvent() setPressed(false); } +void QQuickSlider::wheelEvent(QWheelEvent *event) +{ + Q_D(QQuickSlider); + QQuickControl::wheelEvent(event); + if (d->wheelEnabled) { + const qreal oldValue = d->value; + const QPointF angle = event->angleDelta(); + const qreal delta = (qFuzzyIsNull(angle.y()) ? angle.x() : angle.y()) / QWheelEvent::DefaultDeltasPerStep; + const qreal step = qFuzzyIsNull(d->stepSize) ? 0.1 : d->stepSize; + setValue(oldValue + step * delta); + event->setAccepted(!qFuzzyCompare(d->value, oldValue)); + } +} + void QQuickSlider::mirrorChange() { QQuickControl::mirrorChange(); |