implement drag behavior

This commit is contained in:
laserpants 2016-05-03 08:48:43 +03:00
parent fc253ecd11
commit 6fb7183006
3 changed files with 36 additions and 11 deletions

View File

@ -59,28 +59,50 @@ void Slider::mouseMoveEvent(QMouseEvent *event)
{
Q_D(Slider);
QRect track(d->trackGeometry().adjusted(-2, -2, 2, 2));
if (d->slide) {
setSliderPosition(d->valueFromPosition(event->pos()));
} else
{
QRect track(d->trackGeometry().adjusted(-2, -2, 2, 2));
if (track.contains(event->pos()) != d->hoverTrack) {
d->hoverTrack = !d->hoverTrack;
update();
}
if (track.contains(event->pos()) != d->hoverTrack) {
d->hoverTrack = !d->hoverTrack;
update();
}
QRectF thumb(0, 0, 16, 16);
thumb.moveCenter(d->thumbGeometry().center());
QRectF thumb(0, 0, 16, 16);
thumb.moveCenter(d->thumbGeometry().center());
if (thumb.contains(event->pos()) != d->hoverThumb) {
d->hoverThumb = !d->hoverThumb;
update();
if (thumb.contains(event->pos()) != d->hoverThumb) {
d->hoverThumb = !d->hoverThumb;
update();
}
}
QAbstractSlider::mouseMoveEvent(event);
}
void Slider::mousePressEvent(QMouseEvent *event)
{
Q_D(Slider);
QRectF thumb(0, 0, 16, 16);
thumb.moveCenter(d->thumbGeometry().center());
if (thumb.contains(event->pos())) {
d->slide = true;
}
}
void Slider::mouseReleaseEvent(QMouseEvent *event)
{
Q_D(Slider);
if (d->slide) {
d->slide = false;
return QAbstractSlider::mouseReleaseEvent(event);
}
QRect track(d->trackGeometry().adjusted(-2, -2, 2, 2));
if (track.contains(event->pos())) {

View File

@ -20,6 +20,7 @@ public:
protected:
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
const QScopedPointer<SliderPrivate> d_ptr;

View File

@ -17,7 +17,8 @@ public:
: q_ptr(parent),
orientation(Qt::Horizontal),
hoverTrack(false),
hoverThumb(false)
hoverThumb(false),
slide(false)
{
parent->setMouseTracking(true);
}
@ -134,6 +135,7 @@ public:
Qt::Orientation orientation;
bool hoverTrack;
bool hoverThumb;
bool slide;
};
#endif // SLIDER_P_H