📄 qslider.cpp
字号:
mySlider->setObjectName(name); \endcode*/QSlider::QSlider(Qt::Orientation orientation, QWidget *parent, const char *name) : QAbstractSlider(*new QSliderPrivate, parent){ setObjectName(QString::fromAscii(name)); d_func()->orientation = orientation; d_func()->init();}/*! Use QSlider(), QObject::setObjectName() and the functionality inherited from QAbstractSlider instead. \oldcode QSlider *mySlider = new QSlider(minValue, maxValue, pageStep, value, orientation, parent, name); \newcode QSlider *mySlider = new QSlider(orientation, parent); mySlider->setObjectName(name); mySlider->setMinimum(minValue); mySlider->setMaximum(maxValue); mySlider->setPageStep(pageStep); mySlider->setValue(value); \endcode*/QSlider::QSlider(int minValue, int maxValue, int pageStep, int value, Qt::Orientation orientation, QWidget *parent, const char *name) : QAbstractSlider(*new QSliderPrivate, parent){ Q_D(QSlider); setObjectName(QString::fromAscii(name)); d->minimum = minValue; d->maximum = maxValue; d->pageStep = pageStep; d->position = d->value = value; d->orientation = orientation; d->init();}#endif/*! Destroys this slider.*/QSlider::~QSlider(){}/*! \reimp*/void QSlider::paintEvent(QPaintEvent *){ Q_D(QSlider); QPainter p(this); QStyleOptionSlider opt; initStyleOption(&opt); opt.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle; if (d->tickPosition != NoTicks) opt.subControls |= QStyle::SC_SliderTickmarks; if (d->pressedControl) { opt.activeSubControls = d->pressedControl; opt.state |= QStyle::State_Sunken; } else { opt.activeSubControls = d->hoverControl; } style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this);}/*! \reimp*/bool QSlider::event(QEvent *event){ Q_D(QSlider); switch(event->type()) { case QEvent::HoverEnter: case QEvent::HoverLeave: case QEvent::HoverMove: if (const QHoverEvent *he = static_cast<const QHoverEvent *>(event)) d->updateHoverControl(he->pos()); break; case QEvent::StyleChange: case QEvent::MacSizeChange: d->resetLayoutItemMargins(); break; default: break; } return QAbstractSlider::event(event);}/*! \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()); d->snapBackPosition = d->position; update(sr); setSliderDown(true); }}/*! \reimp*/void QSlider::mouseMoveEvent(QMouseEvent *ev){ Q_D(QSlider); if (d->pressedControl != QStyle::SC_SliderHandle) { ev->ignore(); return; } ev->accept(); int newPosition = d->pixelPosToRangeValue(d->pick(ev->pos()) - d->clickOffset); QStyleOptionSlider opt; initStyleOption(&opt); int m = style()->pixelMetric(QStyle::PM_MaximumDragDistance, &opt, this); if (m >= 0) { QRect r = rect(); r.adjust(-m, -m, m, m); if (!r.contains(ev->pos())) { newPosition = d->snapBackPosition; } } setSliderPosition(newPosition);}/*! \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*/QSize QSlider::sizeHint() const{ Q_D(const QSlider); ensurePolished(); const int SliderLength = 84, TickSpace = 5; QStyleOptionSlider opt; initStyleOption(&opt); int thick = style()->pixelMetric(QStyle::PM_SliderThickness, &opt, this); if (d->tickPosition & TicksAbove) thick += TickSpace; if (d->tickPosition & TicksBelow) thick += TickSpace; int w = thick, h = SliderLength; if (d->orientation == Qt::Horizontal) { w = SliderLength; h = thick; } return style()->sizeFromContents(QStyle::CT_Slider, &opt, QSize(w, h), this).expandedTo(QApplication::globalStrut());}/*! \reimp*/QSize QSlider::minimumSizeHint() const{ Q_D(const QSlider); QSize s = sizeHint(); QStyleOptionSlider opt; initStyleOption(&opt); int length = style()->pixelMetric(QStyle::PM_SliderLength, &opt, this); if (d->orientation == Qt::Horizontal) s.setWidth(length); else s.setHeight(length); return s;}/*! \property QSlider::tickPosition \brief the tickmark position for this slider The valid values are described by the QSlider::TickPosition enum. The default value is \l QSlider::NoTicks. \sa tickInterval*/void QSlider::setTickPosition(TickPosition position){ Q_D(QSlider); d->tickPosition = position; d->resetLayoutItemMargins(); update(); updateGeometry();}QSlider::TickPosition QSlider::tickPosition() const{ return d_func()->tickPosition;}/*! \fn TickPosition QSlider::tickmarks() const \compat Use tickPosition() instead.*//*! \fn QSlider::setTickmarks(TickPosition position) \compat Use setTickPosition() instead.*//*! \property QSlider::tickInterval \brief the interval between tickmarks This is a value interval, not a pixel interval. If it is 0, the slider will choose between lineStep() and pageStep(). The default value is 0. \sa tickPosition, lineStep(), pageStep()*/void QSlider::setTickInterval(int ts){ d_func()->tickInterval = qMax(0, ts); update();}int QSlider::tickInterval() const{ return d_func()->tickInterval;}/*! \fn void QSlider::addStep() Use setValue() instead.*//*! \fn void QSlider::subtractStep() Use setValue() instead.*//*! \internal Returns the style option for slider.*/Q_GUI_EXPORT QStyleOptionSlider qt_qsliderStyleOption(QSlider *slider){ QStyleOptionSlider sliderOption; slider->initStyleOption(&sliderOption); return sliderOption;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -