From fc253ecd11a959eb542e4ed0f91fd036c7504be7 Mon Sep 17 00:00:00 2001 From: laserpants Date: Mon, 2 May 2016 23:57:57 +0300 Subject: [PATCH] implement mouse release handler --- components/slider.cpp | 13 +++++++++++++ components/slider.h | 1 + components/slider_p.h | 18 ++++++++++++++++++ examples/sliderexamples.cpp | 4 +--- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/components/slider.cpp b/components/slider.cpp index 03f2672..58bfa11 100644 --- a/components/slider.cpp +++ b/components/slider.cpp @@ -76,3 +76,16 @@ void Slider::mouseMoveEvent(QMouseEvent *event) QAbstractSlider::mouseMoveEvent(event); } + +void Slider::mouseReleaseEvent(QMouseEvent *event) +{ + Q_D(Slider); + + QRect track(d->trackGeometry().adjusted(-2, -2, 2, 2)); + + if (track.contains(event->pos())) { + setValue(d->valueFromPosition(event->pos())); + } + + QAbstractSlider::mouseReleaseEvent(event); +} diff --git a/components/slider.h b/components/slider.h index 6eb3ff0..7868149 100644 --- a/components/slider.h +++ b/components/slider.h @@ -20,6 +20,7 @@ public: protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; const QScopedPointer d_ptr; diff --git a/components/slider_p.h b/components/slider_p.h index ac70358..1ba766b 100644 --- a/components/slider_p.h +++ b/components/slider_p.h @@ -111,6 +111,24 @@ public: #endif } + int valueFromPosition(const QPoint &pos) const + { + Q_Q(const Slider); + + const int span = Qt::Horizontal == orientation + ? q->rect().width() - THUMB_OUTER_SIZE + : q->rect().height() - THUMB_OUTER_SIZE; + + const int position = Qt::Horizontal == orientation ? pos.x() : pos.y(); + + return Style::sliderValueFromPosition( + q->minimum(), + q->maximum(), + position - THUMB_OUTER_SIZE/2, + span, + false); + } + Slider *const q_ptr; Qt::Orientation orientation; diff --git a/examples/sliderexamples.cpp b/examples/sliderexamples.cpp index 141e8be..7740972 100644 --- a/examples/sliderexamples.cpp +++ b/examples/sliderexamples.cpp @@ -145,7 +145,5 @@ void SliderExamples::flip() void SliderExamples::updateSliderValue() { - int n = _edit2->text().toInt(); - qDebug() << n; - _slider2->setValue(n); + _slider2->setValue(_edit2->text().toInt()); }