implement drag behavior
This commit is contained in:
parent
fc253ecd11
commit
6fb7183006
|
@ -59,28 +59,50 @@ void Slider::mouseMoveEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
Q_D(Slider);
|
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) {
|
if (track.contains(event->pos()) != d->hoverTrack) {
|
||||||
d->hoverTrack = !d->hoverTrack;
|
d->hoverTrack = !d->hoverTrack;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
QRectF thumb(0, 0, 16, 16);
|
QRectF thumb(0, 0, 16, 16);
|
||||||
thumb.moveCenter(d->thumbGeometry().center());
|
thumb.moveCenter(d->thumbGeometry().center());
|
||||||
|
|
||||||
if (thumb.contains(event->pos()) != d->hoverThumb) {
|
if (thumb.contains(event->pos()) != d->hoverThumb) {
|
||||||
d->hoverThumb = !d->hoverThumb;
|
d->hoverThumb = !d->hoverThumb;
|
||||||
update();
|
update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QAbstractSlider::mouseMoveEvent(event);
|
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)
|
void Slider::mouseReleaseEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
Q_D(Slider);
|
Q_D(Slider);
|
||||||
|
|
||||||
|
if (d->slide) {
|
||||||
|
d->slide = false;
|
||||||
|
return QAbstractSlider::mouseReleaseEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
QRect track(d->trackGeometry().adjusted(-2, -2, 2, 2));
|
QRect track(d->trackGeometry().adjusted(-2, -2, 2, 2));
|
||||||
|
|
||||||
if (track.contains(event->pos())) {
|
if (track.contains(event->pos())) {
|
||||||
|
|
|
@ -20,6 +20,7 @@ public:
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
|
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
|
||||||
void mouseMoveEvent(QMouseEvent *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;
|
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
const QScopedPointer<SliderPrivate> d_ptr;
|
const QScopedPointer<SliderPrivate> d_ptr;
|
||||||
|
|
|
@ -17,7 +17,8 @@ public:
|
||||||
: q_ptr(parent),
|
: q_ptr(parent),
|
||||||
orientation(Qt::Horizontal),
|
orientation(Qt::Horizontal),
|
||||||
hoverTrack(false),
|
hoverTrack(false),
|
||||||
hoverThumb(false)
|
hoverThumb(false),
|
||||||
|
slide(false)
|
||||||
{
|
{
|
||||||
parent->setMouseTracking(true);
|
parent->setMouseTracking(true);
|
||||||
}
|
}
|
||||||
|
@ -134,6 +135,7 @@ public:
|
||||||
Qt::Orientation orientation;
|
Qt::Orientation orientation;
|
||||||
bool hoverTrack;
|
bool hoverTrack;
|
||||||
bool hoverThumb;
|
bool hoverThumb;
|
||||||
|
bool slide;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SLIDER_P_H
|
#endif // SLIDER_P_H
|
||||||
|
|
Loading…
Reference in New Issue