implement drag behavior
This commit is contained in:
parent
fc253ecd11
commit
6fb7183006
|
@ -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())) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue