update slider value

This commit is contained in:
laserpants 2016-04-22 23:31:55 +03:00
parent 16129e7243
commit 5463f5e729
3 changed files with 32 additions and 5 deletions

View File

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

View File

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

View File

@ -1,3 +1,4 @@
#include <QDebug>
#include <QVBoxLayout>
#include <QLineEdit>
#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);
}