📄 qslider.cpp
字号:
Use QSlider() and QObject::setObjectName() instead. \oldcode QSlider *mySlider = new QSlider(orientation, parent, name); \newcode QSlider *mySlider = new QSlider(orientation, parent); 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 = d->getStyleOption(); 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){ switch(event->type()) { case QEvent::HoverEnter: case QEvent::HoverLeave: case QEvent::HoverMove: if (const QHoverEvent *he = static_cast<const QHoverEvent *>(event)) d_func()->updateHoverControl(he->pos()); break; default: break; } return QWidget::event(event);}/*! \reimp*/void QSlider::mousePressEvent(QMouseEvent *ev){ Q_D(QSlider); if (d->maximum == d->minimum || (ev->buttons() ^ ev->button()) || (ev->button() == Qt::RightButton)) { ev->ignore(); return; } ev->accept(); if (ev->button() == Qt::MidButton) { setSliderPosition(d->pixelPosToRangeValue(d->pick(ev->pos()))); triggerAction(SliderMove); setRepeatAction(SliderNoAction); d->pressedControl = QStyle::SC_SliderHandle; update(); } else { QStyleOptionSlider opt = d->getStyleOption(); d->pressedControl = style()->hitTestComplexControl(QStyle::CC_Slider, &opt, ev->pos(), this); SliderAction action = SliderNoAction; if (d->pressedControl == QStyle::SC_SliderGroove) { int pressValue = d->pixelPosToRangeValue(d->pick(ev->pos())); if (pressValue > d->value) action = SliderPageStepAdd; else if (pressValue < d->value) action = SliderPageStepSub; if (action) { triggerAction(action); setRepeatAction(action); } } else if (d->pressedControl == QStyle::SC_SliderHandle) { 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); } } if (d->pressedControl == QStyle::SC_SliderHandle) setSliderDown(true);}/*! \reimp*/void QSlider::mouseMoveEvent(QMouseEvent *ev){ Q_D(QSlider); if (d->pressedControl != QStyle::SC_SliderHandle || (ev->buttons() & Qt::RightButton)) { ev->ignore(); return; } ev->accept(); int newPosition = d->pixelPosToRangeValue(d->pick(ev->pos()) - d->clickOffset); QStyleOptionSlider opt = d->getStyleOption(); 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 = d->getStyleOption(); 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 = d->getStyleOption(); 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 = d->getStyleOption(); 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){ d_func()->tickPosition = position; update();}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.*/#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -