/*! \reimp */ void QSlider::mousePressEvent(QMouseEvent *ev) { Q_D(QSlider); if (d->maximum == d->minimum || (ev->buttons() ^ ev->button())) { ev->ignore(); return; } #ifdef QT_KEYPAD_NAVIGATION if (QApplication::keypadNavigationEnabled()) setEditFocus(true); #endif ev->accept(); if ((ev->button() & style()->styleHint(QStyle::SH_Slider_AbsoluteSetButtons)) == ev->button()) { QStyleOptionSlider opt; initStyleOption(&opt); const QRect sliderRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); const QPoint center = sliderRect.center() - sliderRect.topLeft(); // to take half of the slider off for the setSliderPosition call we use the center - topLeft setSliderPosition(d->pixelPosToRangeValue(d->pick(ev->pos() - center))); triggerAction(SliderMove); setRepeatAction(SliderNoAction); d->pressedControl = QStyle::SC_SliderHandle; update(); } else if ((ev->button() & style()->styleHint(QStyle::SH_Slider_PageSetButtons)) == ev->button()) { QStyleOptionSlider opt; initStyleOption(&opt); d->pressedControl = style()->hitTestComplexControl(QStyle::CC_Slider, &opt, ev->pos(), this); SliderAction action = SliderNoAction; if (d->pressedControl == QStyle::SC_SliderGroove) { const QRect sliderRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); int pressValue = d->pixelPosToRangeValue(d->pick(ev->pos() - sliderRect.center() + sliderRect.topLeft())); d->pressValue = pressValue; if (pressValue > d->value) action = SliderPageStepAdd; else if (pressValue < d->value) action = SliderPageStepSub; if (action) { triggerAction(action); setRepeatAction(action); } } } else { ev->ignore(); return; } if (d->pressedControl == QStyle::SC_SliderHandle) { QStyleOptionSlider opt; initStyleOption(&opt); setRepeatAction(SliderNoAction); QRect sr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); d->clickOffset = d->pick(ev->pos() - sr.topLeft()); update(sr); setSliderDown(true); } }
// Based on code from qslider.cpp void Slider::mousePressEvent( QMouseEvent *e ) { qDebug("pressed (%d, %d)", e->pos().x(), e->pos().y()); if( e->button() == Qt::LeftButton ) { qDebug( "Left button" ); QStyleOptionSlider opt; initStyleOption( &opt ); const QRect sliderRect = style()->subControlRect( QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this ); const QPoint center = sliderRect.center() - sliderRect.topLeft(); // to take half of the slider off for the setSliderPosition call we use the center - topLeft if ( ! sliderRect.contains( e->pos() ) ) { qDebug( "accept" ); e->accept(); int v = pixelPosToRangeValue( pick( e->pos() - center ) ); setSliderPosition( v ); triggerAction( SliderMove ); setRepeatAction( SliderNoAction ); emit sliderMoved( v );//TODO: ok? emit sliderPressed(); //TODO: ok? } else { QSlider::mousePressEvent( e ); } } else { QSlider::mousePressEvent( e ); } }
void DSlider::mousePressEvent(QMouseEvent *event) { QAbstractSlider::mousePressEvent(event); if (event->button() == Qt::LeftButton) { if (orientation() == Qt::Vertical) { setValue(minimum() + ((maximum() - minimum()) * (height() - event->y())) / height()) ; } else { // FIXME // the value 10 is specified in DSlider.theme, it's ugly here, but I don't have any // good idea for now, maybe someone can help. setValue(minimum() + ((maximum() - minimum()) * (event->x() - 10)) / (width() - 10 - 10)) ; } event->accept(); Q_D(DSlider); QStyleOptionSlider opt; initStyleOption(&opt); setRepeatAction(SliderNoAction); QRect sr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); d->clickOffset = d->pick(event->pos() - sr.topLeft()); d->mousePressed = true; emit sliderPressed(); } }
/*! \reimp */ void QxtStars::mousePressEvent(QMouseEvent* event) { if (qxt_d().readOnly) { event->ignore(); return; } QAbstractSlider::mousePressEvent(event); if (maximum() == minimum() || (event->buttons() ^ event->button())) { event->ignore(); return; } event->accept(); QStyleOptionSlider opt = qxt_d().getStyleOption(); const QRect sliderRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); const QPoint center = sliderRect.center() - sliderRect.topLeft(); const int pos = qxt_d().pixelPosToRangeValue(qxt_d().pick(event->pos() - center)); setSliderPosition(pos); triggerAction(SliderMove); setRepeatAction(SliderNoAction); qxt_d().snapBackPosition = pos; update(); }
/*! \reimp */ void QScrollBar::hideEvent(QHideEvent *) { Q_D(QScrollBar); if (d->pressedControl) { d->pressedControl = QStyle::SC_None; setRepeatAction(SliderNoAction); } }
/*! \reimp */ void QScrollBar::mouseMoveEvent(QMouseEvent *e) { Q_D(QScrollBar); if (!d->pressedControl) return; QStyleOptionSlider opt; initStyleOption(&opt); if (!(e->buttons() & Qt::LeftButton || ((e->buttons() & Qt::MidButton) && style()->styleHint(QStyle::SH_ScrollBar_MiddleClickAbsolutePosition, &opt, this)))) return; if (d->pressedControl == QStyle::SC_ScrollBarSlider) { QPoint click = e->pos(); int newPosition = d->pixelPosToRangeValue((HORIZONTAL ? click.x() : click.y()) -d->clickOffset); int m = style()->pixelMetric(QStyle::PM_MaximumDragDistance, &opt, this); if (m >= 0) { QRect r = rect(); r.adjust(-m, -m, m, m); if (! r.contains(e->pos())) newPosition = d->snapBackPosition; } setSliderPosition(newPosition); } else if (!style()->styleHint(QStyle::SH_ScrollBar_ScrollWhenPointerLeavesControl, &opt, this)) { if (style()->styleHint(QStyle::SH_ScrollBar_RollBetweenButtons, &opt, this) && d->pressedControl & (QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine)) { QStyle::SubControl newSc = style()->hitTestComplexControl(QStyle::CC_ScrollBar, &opt, e->pos(), this); if (newSc == d->pressedControl && !d->pointerOutsidePressedControl) return; // nothing to do if (newSc & (QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine)) { d->pointerOutsidePressedControl = false; QRect scRect = style()->subControlRect(QStyle::CC_ScrollBar, &opt, newSc, this); scRect |= style()->subControlRect(QStyle::CC_ScrollBar, &opt, d->pressedControl, this); d->pressedControl = newSc; d->activateControl(d->pressedControl, 0); update(scRect); return; } } // stop scrolling when the mouse pointer leaves a control // similar to push buttons QRect pr = style()->subControlRect(QStyle::CC_ScrollBar, &opt, d->pressedControl, this); if (pr.contains(e->pos()) == d->pointerOutsidePressedControl) { if ((d->pointerOutsidePressedControl = !d->pointerOutsidePressedControl)) { d->pointerOutsidePressedControl = true; setRepeatAction(SliderNoAction); repaint(pr); } else { d->activateControl(d->pressedControl); } } } }
/*! \reimp */ void QSlider::mouseReleaseEvent(QMouseEvent *ev) { Q_D(QSlider); if (d->pressedControl == QStyle::SC_None || ev->buttons()) { ev->ignore(); return; } ev->accept(); QStyle::SubControl oldPressed = QStyle::SubControl(d->pressedControl); d->pressedControl = QStyle::SC_None; setRepeatAction(SliderNoAction); if (oldPressed == QStyle::SC_SliderHandle) setSliderDown(false); QStyleOptionSlider opt; initStyleOption(&opt); opt.subControls = oldPressed; update(style()->subControlRect(QStyle::CC_Slider, &opt, oldPressed, this)); }
/*! \reimp */ void QxtStars::mouseReleaseEvent(QMouseEvent* event) { if (qxt_d().readOnly) { event->ignore(); return; } QAbstractSlider::mouseReleaseEvent(event); if (event->buttons()) { event->ignore(); return; } event->accept(); setRepeatAction(SliderNoAction); }
void rphSlider::mousePressEvent( QMouseEvent* e ) { if (e->button() == Qt::LeftButton) { QStyleOptionSlider opt; initStyleOption(&opt); const QRect sliderRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); const QPoint center = sliderRect.center() - sliderRect.topLeft(); // to take half of the slider off for the setSliderPosition call we use the center - topLeft if (!sliderRect.contains(e->pos())) { e->accept(); setSliderPosition(pixelPosToRangeValue(pick(e->pos() - center))); triggerAction(SliderMove); setRepeatAction(SliderNoAction); pressedControl=QStyle::SC_SliderHandle; } else { QSlider::mousePressEvent(e); } } else { QSlider::mousePressEvent(e); } }
void DhQSlider::DvhsetRepeatAction(long x1, int x2, int x3) { return setRepeatAction((QAbstractSlider::SliderAction)x1, x2, x3); }
void DhQSlider::DvhsetRepeatAction(long x1) { return setRepeatAction((QAbstractSlider::SliderAction)x1); }