From 5463f5e729b6e67adcec813a82e7ff046cb660fb Mon Sep 17 00:00:00 2001 From: laserpants Date: Fri, 22 Apr 2016 23:31:55 +0300 Subject: [PATCH] update slider value --- components/slider.cpp | 29 ++++++++++++++++++++++++++--- components/slider.h | 3 +++ examples/sliderexamples.cpp | 5 +++-- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/components/slider.cpp b/components/slider.cpp index 08ee7e8..bc1a43a 100644 --- a/components/slider.cpp +++ b/components/slider.cpp @@ -56,7 +56,8 @@ void Handle::mousePressEvent(QMouseEvent *event) void Handle::mouseMoveEvent(QMouseEvent *event) { setRelativePosition(event->globalPos()); - _slider->update(); + //_slider->update(); + _slider->updateValue(); } Slider::Slider(QWidget *parent) @@ -111,7 +112,8 @@ void Slider::mousePressEvent(QMouseEvent *event) _handle->setOffset((event->pos() - QPoint(s.width()/2, s.height()/2)) - event->globalPos()); _handle->setRelativePosition(event->globalPos()); _drag = true; - update(); + //update(); + updateValue(); } else { _drag = false; } @@ -122,7 +124,8 @@ void Slider::mouseMoveEvent(QMouseEvent *event) { if (_drag) { _handle->setRelativePosition(event->globalPos()); - update(); + //update(); + updateValue(); } QAbstractSlider::mouseMoveEvent(event); } @@ -132,3 +135,23 @@ void Slider::resizeEvent(QResizeEvent *event) _handle->refreshGeometry(); QAbstractSlider::resizeEvent(event); } + +void Slider::updateValue() +{ + const qreal tot = Qt::Horizontal == _orientation + ? geometry().width()-_handle->width() + : geometry().height()-_handle->height(); + + const qreal r = Qt::Horizontal == _orientation + ? _handle->geometry().left() / tot + : _handle->geometry().top() / tot; + + // use QStyle::sliderValueFromPosition ?? + + setValue((1-r)*minimum()+r*maximum()); + + //setSliderPosition((1-r)*minimum()+r*maximum()); + //triggerAction(QAbstractSlider::SliderMove); + + update(); +} diff --git a/components/slider.h b/components/slider.h index 711ae25..0d27c38 100644 --- a/components/slider.h +++ b/components/slider.h @@ -56,7 +56,10 @@ protected: void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: + friend class Handle; + inline bool isOnTrack(int p, int x) const { return (p >= x-2 && p <= x+2); } + void updateValue(); bool _drag; Handle *const _handle; diff --git a/examples/sliderexamples.cpp b/examples/sliderexamples.cpp index bfaae8b..efd8fee 100644 --- a/examples/sliderexamples.cpp +++ b/examples/sliderexamples.cpp @@ -1,3 +1,4 @@ +#include #include #include #include "sliderexamples.h" @@ -48,10 +49,9 @@ SliderExamples::SliderExamples(QWidget *parent) widget->setLayout(layout); Slider *slider = new Slider; - QLineEdit *edit = new QLineEdit; layout->addWidget(slider); - layout->addWidget(edit); + layout->addWidget(_edit); layout->setStretch(0, 1); layout->setStretch(1, 1); @@ -65,6 +65,7 @@ SliderExamples::SliderExamples(QWidget *parent) frame->setWidget(view); connect(slider, SIGNAL(valueChanged(int)), this, SLOT(updateValue(int))); +// connect(slider, SIGNAL(sliderMoved(int)), this, SLOT(updateValue(int))); mainLayout->addWidget(frame); }