179QAbstractSliderPrivate::QAbstractSliderPrivate()
180 : minimum(0), maximum(99), pageStep(10), value(0), position(0), pressValue(-1),
181 singleStep(1), singleStepFromItemView(-1), viewMayChangeSingleStep(
true), offset_accumulated(0), tracking(
true),
182 blocktracking(
false), pressed(
false),
183 invertedAppearance(
false), invertedControls(
false),
184 orientation(Qt::Horizontal), repeatAction(QAbstractSlider::SliderNoAction)
200void QAbstractSlider::setRange(
int min,
int max)
202 Q_D(QAbstractSlider);
203 int oldMin = d->minimum;
204 int oldMax = d->maximum;
206 d->maximum = qMax(min, max);
207 if (oldMin != d->minimum || oldMax != d->maximum) {
208 sliderChange(SliderRangeChange);
209 emit rangeChanged(d->minimum, d->maximum);
257void QAbstractSlider::setOrientation(Qt::Orientation orientation)
259 Q_D(QAbstractSlider);
260 if (d->orientation == orientation)
263 d->orientation = orientation;
264 if (!testAttribute(Qt::WA_WState_OwnSizePolicy)) {
265 setSizePolicy(sizePolicy().transposed());
266 setAttribute(Qt::WA_WState_OwnSizePolicy,
false);
268 sliderChange(SliderOrientationChange);
341void QAbstractSlider::setSingleStep(
int step)
343 Q_D(QAbstractSlider);
345 d->viewMayChangeSingleStep = (step < 0);
346 if (step < 0 && d->singleStepFromItemView > 0)
347 step = d->singleStepFromItemView;
349 if (step != d->singleStep)
350 d->setSteps(step, d->pageStep);
449void QAbstractSlider::setSliderPosition(
int position)
451 Q_D(QAbstractSlider);
452 position = d->bound(position);
453 if (position == d->position)
455 d->position = position;
459 emit sliderMoved(position);
460 if (d->tracking && !d->blocktracking)
461 triggerAction(SliderMove);
488void QAbstractSlider::setValue(
int value)
490 Q_D(QAbstractSlider);
491 value = d->bound(value);
492 if (d->value == value && d->position == value)
496 const bool emitValueChanged = (value != d->value);
499 if (d->position != value) {
502 emit sliderMoved(d->position);
504#if QT_CONFIG(accessibility)
505 QAccessibleValueChangeEvent event(
this, d->value);
506 QAccessible::updateAccessibility(&event);
508 sliderChange(SliderValueChange);
510 if (emitValueChanged)
511 emit valueChanged(value);
572void QAbstractSlider::triggerAction(SliderAction action)
574 Q_D(QAbstractSlider);
575 d->blocktracking =
true;
577 case SliderSingleStepAdd:
578 setSliderPosition(d->overflowSafeAdd(d->effectiveSingleStep()));
580 case SliderSingleStepSub:
581 setSliderPosition(d->overflowSafeAdd(-d->effectiveSingleStep()));
583 case SliderPageStepAdd:
584 setSliderPosition(d->overflowSafeAdd(d->pageStep));
586 case SliderPageStepSub:
587 setSliderPosition(d->overflowSafeAdd(-d->pageStep));
589 case SliderToMinimum:
590 setSliderPosition(d->minimum);
592 case SliderToMaximum:
593 setSliderPosition(d->maximum);
599 emit actionTriggered(action);
600 d->blocktracking =
false;
601 setValue(d->position);
609void QAbstractSlider::setRepeatAction(SliderAction action,
int thresholdTime,
int repeatTime)
611 Q_D(QAbstractSlider);
612 if ((d->repeatAction = action) == SliderNoAction) {
613 d->repeatActionTimer.stop();
615 d->repeatActionTime = repeatTime;
616 d->repeatActionTimer.start(thresholdTime,
this);
632void QAbstractSlider::timerEvent(QTimerEvent *e)
634 Q_D(QAbstractSlider);
635 if (e->timerId() == d->repeatActionTimer.timerId()) {
636 if (d->repeatActionTime) {
637 d->repeatActionTimer.start(d->repeatActionTime,
this);
638 d->repeatActionTime = 0;
640 if (d->repeatAction == SliderPageStepAdd)
641 d->setAdjustedSliderPosition(d->overflowSafeAdd(d->pageStep));
642 else if (d->repeatAction == SliderPageStepSub)
643 d->setAdjustedSliderPosition(d->overflowSafeAdd(-d->pageStep));
645 triggerAction(d->repeatAction);
661bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::KeyboardModifiers modifiers,
int delta)
663 Q_Q(QAbstractSlider);
664 int stepsToScroll = 0;
666 if (orientation == Qt::Horizontal)
668 qreal offset = qreal(delta) / 120;
670 if ((modifiers & Qt::ControlModifier) || (modifiers & Qt::ShiftModifier)) {
672 stepsToScroll = qBound(-pageStep,
int(offset * pageStep), pageStep);
673 offset_accumulated = 0;
678 qreal stepsToScrollF =
679#if QT_CONFIG(wheelevent)
680 QApplication::wheelScrollLines() *
682 offset * effectiveSingleStep();
684 if (offset_accumulated != 0 && (offset / offset_accumulated) < 0)
685 offset_accumulated = 0;
687 offset_accumulated += stepsToScrollF;
690 stepsToScroll = qBound(-pageStep,
int(offset_accumulated), pageStep);
692 offset_accumulated -=
int(offset_accumulated);
693 if (stepsToScroll == 0) {
696 const float effective_offset = invertedControls ? -offset_accumulated : offset_accumulated;
697 if (effective_offset > 0.f && value < maximum)
699 if (effective_offset < 0.f && value > minimum)
701 offset_accumulated = 0;
706 if (invertedControls)
707 stepsToScroll = -stepsToScroll;
709 int prevValue = value;
710 position = bound(overflowSafeAdd(stepsToScroll));
711 q->triggerAction(QAbstractSlider::SliderMove);
713 if (prevValue == value) {
714 offset_accumulated = 0;
741void QAbstractSlider::keyPressEvent(QKeyEvent *ev)
743 Q_D(QAbstractSlider);
744 SliderAction action = SliderNoAction;
749 action = d->invertedControls ? SliderSingleStepSub : SliderSingleStepAdd;
751 action = !d->invertedControls ? SliderSingleStepSub : SliderSingleStepAdd;
755 action = d->invertedControls ? SliderSingleStepAdd : SliderSingleStepSub;
757 action = !d->invertedControls ? SliderSingleStepAdd : SliderSingleStepSub;
760 action = d->invertedControls ? SliderSingleStepSub : SliderSingleStepAdd;
763 action = d->invertedControls ? SliderSingleStepAdd : SliderSingleStepSub;
766 action = d->invertedControls ? SliderPageStepSub : SliderPageStepAdd;
768 case Qt::Key_PageDown:
769 action = d->invertedControls ? SliderPageStepAdd : SliderPageStepSub;
772 action = SliderToMinimum;
775 action = SliderToMaximum;
782 triggerAction(action);
816void QAbstractSliderPrivate::itemviewChangeSingleStep(
int step)
818 singleStepFromItemView = step;
819 if (viewMayChangeSingleStep && singleStep != step)
820 setSteps(step, pageStep);