?? qslider.cpp
字號(hào):
(funnyWindowsStyle && style() == WindowsStyle) ) { int pos = goodPart( e->pos() ); moveSlider( pos - slideLength() / 2 ); state = Dragging; clickOffset = slideLength() / 2; } else if ( orient == Horizontal && e->pos().x() < r.left() //### goodPart || orient == Vertical && e->pos().y() < r.top() ) { state = TimingDown; subtractPage(); if ( !timer ) timer = new QTimer( this ); connect( timer, SIGNAL(timeout()), SLOT(repeatTimeout()) ); timer->start( thresholdTime, TRUE ); } else if ( orient == Horizontal && e->pos().x() > r.right() //### goodPart || orient == Vertical && e->pos().y() > r.bottom() ) { state = TimingUp; addPage(); if ( !timer ) timer = new QTimer( this ); connect( timer, SIGNAL(timeout()), SLOT(repeatTimeout()) ); timer->start( thresholdTime, TRUE ); }}/*!\reimp*/void QSlider::mouseMoveEvent( QMouseEvent *e ){ if ( state != Dragging ) return; if ( style() == WindowsStyle ) { QRect r = rect(); int m = style().maximumSliderDragDistance(); if ( m >= 0 ) { if ( orientation() == Horizontal ) r.setRect( r.x() - m, r.y() - 2*m/3, r.width() + 2*m, r.height() + 3*m ); else r.setRect( r.x() - 2*m/3, r.y() - m, r.width() + 3*m, r.height() + 2*m ); if ( !r.contains( e->pos() ) ) { moveSlider( positionFromValue( sliderStartVal) ); return; } } } int pos = goodPart( e->pos() ); moveSlider( pos - clickOffset );}/*!\reimp*/void QSlider::wheelEvent( QWheelEvent * e){ static float offset = 0; static QSlider* offset_owner = 0; if (offset_owner != this){ offset_owner = this; offset = 0; } offset += -e->delta()*QMAX(pageStep(),lineStep())/120; if (QABS(offset)<1) return; setValue( value() + int(offset) ); offset -= int(offset); e->accept();}/*!\reimp*/void QSlider::mouseReleaseEvent( QMouseEvent * ){ resetState();}/*!\reimp*/void QSlider::focusInEvent( QFocusEvent * e){#ifdef QT_KEYPAD_MODE sliderStartVal = sliderVal;#endif QWidget::focusInEvent( e );}/*!\reimp*/void QSlider::focusOutEvent( QFocusEvent * e ){ QWidget::focusOutEvent( e );}/*! Moves the left (or top) edge of the slider to position \a pos. Performs snapping.*/void QSlider::moveSlider( int pos ){ int a = available(); int newPos = QMIN( a, QMAX( 0, pos ) ); int newVal = valueFromPosition( newPos ); if ( sliderVal != newVal ) { sliderVal = newVal; emit sliderMoved( sliderVal ); } if ( tracking() && sliderVal != value() ) { setValue( sliderVal ); // ### Why do we emit the valueChanged signal here? It will get emitted in // valueChange() anyway... //emit valueChanged( sliderVal ); } switch ( (GUIStyle)style() ) { case WindowsStyle: newPos = positionFromValue( newVal ); break; default: case MotifStyle: break; } if ( sliderPos != newPos ) reallyMoveSlider( newPos );}/*! Resets all state information and stops my timer.*/void QSlider::resetState(){ if ( timer ) { timer->stop(); timer->disconnect(); } switch ( state ) { case TimingUp: case TimingDown: break; case Dragging: { setValue( valueFromPosition( sliderPos ) ); emit sliderReleased(); break; } case Idle: break; default: qWarning("QSlider: (%s) in wrong state", name( "unnamed" ) ); } state = Idle;}/*!\reimp*/void QSlider::keyPressEvent( QKeyEvent *e ){#ifdef QT_KEYPAD_MODE switch( e->key() ) { case Key_Select: if( qt_modalEditingEnabled ) { if ( !isModalEditing() ) { setModalEditing( TRUE ); sliderStartVal = sliderVal; return; } else { setModalEditing( FALSE ); } } break; case Key_Back: case Key_No: if ( qt_modalEditingEnabled && isModalEditing() ) { setModalEditing( FALSE ); if ( sliderStartVal != sliderVal ) moveSlider( positionFromValue( sliderStartVal) ); } else { e->ignore(); } return; default: if( qt_modalEditingEnabled ) { if ( !isModalEditing() ) { e->ignore(); return; } } }#endif bool sloppy = ( style() == MotifStyle ); switch ( e->key() ) { case Key_Left: if ( sloppy || orient == Horizontal ) subtractLine(); break; case Key_Right: if ( sloppy || orient == Horizontal ) addLine(); break; case Key_Up: if ( sloppy || orient == Vertical ) subtractLine(); break; case Key_Down: if ( sloppy || orient == Vertical ) addLine(); break; case Key_Prior: subtractPage(); break; case Key_Next: addPage(); break; case Key_Home: setValue( minValue() ); break; case Key_End: setValue( maxValue() ); break; default: e->ignore(); return; }}/*! Returns the length of the slider.*/int QSlider::slideLength() const{ switch ( (GUIStyle)style() ) { case WindowsStyle: return style().sliderLength(); default: case MotifStyle: return style().sliderLength(); }}/*! Makes QRangeControl::setValue() available as a slot.*/void QSlider::setValue( int value ){ QRangeControl::setValue( value );}/*! Moves the slider one pageStep() upwards.*/void QSlider::addStep(){ addPage();}/*! Moves the slider one pageStep() downwards.*/void QSlider::subtractStep(){ subtractPage();}/*! Waits for autorepeat.*/void QSlider::repeatTimeout(){ ASSERT( timer ); timer->disconnect(); if ( state == TimingDown ) connect( timer, SIGNAL(timeout()), SLOT(subtractStep()) ); else if ( state == TimingUp ) connect( timer, SIGNAL(timeout()), SLOT(addStep()) ); timer->start( repeatTime, FALSE );}/*! Returns the relevant dimension of \a p.*/int QSlider::goodPart( const QPoint &p ) const{ return (orient == Horizontal) ? p.x() : p.y();}/*!\reimp*/QSize QSlider::sizeHint() const{ constPolish(); const int length = 84; // int thick = style() == MotifStyle ? 24 : 16; int thick = style().sliderThickness(); const int tickSpace = 5; if ( ticks & Above ) thick += tickSpace; if ( ticks & Below ) thick += tickSpace; if ( style() == WindowsStyle && ticks != Both && ticks != NoMarks ) thick += style().sliderLength() / 4; // pointed slider if ( orient == Horizontal ) return QSize( length, thick ).expandedTo( QApplication::globalStrut() ); else return QSize( thick, length ).expandedTo( QApplication::globalStrut() );}/*! \reimp*/QSize QSlider::minimumSizeHint() const{ QSize s = sizeHint(); int length = style().sliderLength(); if ( orient == Horizontal ) s.setWidth( length ); else s.setHeight( length ); return s;}/*!\reimp*/QSizePolicy QSlider::sizePolicy() const{ if ( orient == Horizontal ) return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); else return QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Expanding );}/*! Returns the number of pixels to use for the business part of the slider (i.e. the non-tickmark portion). The remaining space is shared equally between the tickmark regions. This function and sizeHint() are closely related; if you change one, you almost certainly have to change the other.*/int QSlider::thickness() const{ int space = (orient == Horizontal) ? height() : width(); int n = 0; if ( ticks & Above ) n++; if ( ticks & Below ) n++; if ( !n ) return space; int thick = 6; // Magic constant to get 5 + 16 + 5 if ( style() == WindowsStyle && ticks != Both && ticks != NoMarks ) { thick += style().sliderLength() / 4; } space -= thick; //### the two sides may be unequal in size if ( space > 0 ) thick += ( space * 2 ) / ( n + 2 ); return thick;}/*! \obsolete \overload Do not reimplement this function, it's only there for compatibility reasons. It simply calls the other version with colorGroup() as the second argument.*/void QSlider::drawTicks( QPainter *p, int dist, int w, int i ) const{ drawTicks( p, colorGroup(), dist, w, i);}/*! Using \a p, draws tickmarks at a distance of \a dist from the edge of the widget, using \a w pixels and with an interval of \a i. Setting the colorgroup is useful to reuse the code to draw a mask if the slider supports transparceny. \sa setAutoMask(), updateMask()*/void QSlider::drawTicks( QPainter *p, const QColorGroup& g, int dist, int w, int i ) const{ p->setPen( g.foreground() ); int v = minValue(); int fudge = slideLength() / 2 + 1; if(!i) i = 1; while ( v <= maxValue() + 1 ) { int pos = positionFromValue( v ) + fudge; if ( orient == Horizontal ) p->drawLine( pos, dist, pos, dist + w ); else p->drawLine( dist, pos, dist + w, pos ); v += i; }}/*! Sets the way tickmarks are displayed by the slider. \a s can take the following values: <ul> <li> \c NoMarks <li> \c Above <li> \c Left <li> \c Below <li> \c Right <li> \c Both </ul> The initial value is \c NoMarks. \sa tickmarks(), setTickInterval()*/void QSlider::setTickmarks( TickSetting s ){ ticks = s; initTicks(); update(); if ( autoMask() ) updateMask();}/*! \fn QSlider::TickSetting QSlider::tickmarks() const Returns the tickmark settings for this slider. \sa setTickmarks() *//*! \fn QSlider::TickSetting tickmarks() const Returns the way tickmarks are displayed by the slider. \sa setTickmarks()*//*! Sets the interval between tickmarks to \a i. This is a value interval, not a pixel interval. If \a i is 0, the slider will choose between lineStep() and pageStep(). The initial value of tickInterval() is 0. \sa tickInterval(), QRangeControl::lineStep(), QRangeControl::pageStep()*/void QSlider::setTickInterval( int i ){ tickInt = QMAX( 0, i ); update(); if ( autoMask() ) updateMask();}/*! \fn int QSlider::tickInterval() const Returns the interval between tickmarks. Returns 0 if the slider chooses between pageStep() and lineStep(). \sa setTickInterval()*//*! \reimp */void QSlider::styleChange( QStyle& old ){ QWidget::styleChange( old );}/*! \reimp*/int QSlider::minValue() const{ return QRangeControl::minValue();}/*! \reimp*/int QSlider::maxValue() const{ return QRangeControl::maxValue();}/*! A convenience function which just calls setRange( i, maxValue() ) \sa setRange()*/void QSlider::setMinValue( int i ){ setRange( i, maxValue() );}/*! A convenience function which just calls setRange( minValue(), i ) \sa setRange()*/void QSlider::setMaxValue( int i ){ setRange( minValue(), i );}/*! \reimp*/int QSlider::lineStep() const{ return QRangeControl::lineStep();}/*! \reimp*/int QSlider::pageStep() const{ return QRangeControl::pageStep();}/*! Sets the line step to \e i. Calls the virtual stepChange() function if the new line step is different from the previous setting. \sa lineStep() QRangeControl::setSteps() setPageStep() setRange()*/void QSlider::setLineStep( int i ){ setSteps( i, pageStep() );}/*! Sets the page step to \e i. Calls the virtual stepChange() function if the new page step is different from the previous setting. \sa pageStep() QRangeControl::setSteps() setLineStep() setRange()*/void QSlider::setPageStep( int i ){ setSteps( lineStep(), i );}/*! \reimp*/int QSlider::value() const{ return QRangeControl::value();}#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -