⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qwindowsstyle.cpp

📁 qtopia-phone-2.2.0下公共的控件实现源代码。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	    d = w - d - 1;	    p->drawLine( x2, y1, x2-d, y1-d);	    d--;	    p->setPen( c3 );	    p->drawLine( x1+1, y1, x1+1+d, y1-d );	    p->setPen( c1 );	    p->drawLine( x2-1, y1, x2-1-d, y1-d);	    break;	case SlDown:	    p->setPen( c4 );	    p->drawLine( x1, y2, x1+d, y2+d);	    p->setPen( c0 );	    d = w - d - 1;	    p->drawLine( x2, y2, x2-d, y2+d);	    d--;	    p->setPen( c3 );	    p->drawLine( x1+1, y2, x1+1+d, y2+d );	    p->setPen( c1 );	    p->drawLine( x2-1, y2, x2-1-d, y2+d);	    break;	case SlLeft:	    p->setPen( c4 );	    p->drawLine( x1, y1, x1-d, y1+d);	    p->setPen( c0 );	    d = h - d - 1;	    p->drawLine( x1, y2, x1-d, y2-d);	    d--;	    p->setPen( c3 );	    p->drawLine( x1, y1+1, x1-d, y1+1+d );	    p->setPen( c1 );	    p->drawLine( x1, y2-1, x1-d, y2-1-d);	    break;	case SlRight:	    p->setPen( c4 );	    p->drawLine( x2, y1, x2+d, y1+d);	    p->setPen( c0 );	    d = h - d - 1;	    p->drawLine( x2, y2, x2+d, y2-d);	    d--;	    p->setPen( c3 );	    p->drawLine(  x2, y1+1, x2+d, y1+1+d );	    p->setPen( c1 );	    p->drawLine( x2, y2-1, x2+d, y2-1-d);	    break;    }#endif}/*!  Draws the mask of a slider*/voidQWindowsStyle::drawSliderMask( QPainter *p,			int x, int y, int w, int h,			Orientation orient, bool tickAbove, bool tickBelow ){    if ( tickAbove && tickBelow || !tickAbove && !tickBelow ) {	p->fillRect(x, y, w, h, color1);	return;    }    int x1 = x;    int x2 = x+w-1;    int y1 = y;    int y2 = y+h-1;    enum  { SlUp, SlDown, SlLeft, SlRight } dir;    if ( orient == Horizontal )	if ( tickAbove )	    dir = SlUp;	else	    dir = SlDown;    else	if ( tickAbove )	    dir = SlLeft;	else	    dir = SlRight;    switch ( dir ) {    case SlUp:	y1 = y1 + w/2;	break;    case SlDown:	y2 = y2 - w/2;	break;    case SlLeft:	x1 = x1 + h/2;	break;    case SlRight:	x2 = x2 - h/2;	break;    }    QPointArray a;    switch ( dir ) {    case SlUp:    a.setPoints(5, x1,y1, x1 + w/2, y1 - w/2, x2,y1, x2,y2, x1,y2);	break;    case SlDown:    a.setPoints(5, x1,y1, x2,y1,  x2,y2,  x1 + w/2, y2 + w/2, x1,y2);	break;    case SlLeft:    a.setPoints(5, x1,y1, x2,y1, x2,y2, x1,y2, x1 - h/2, y1 + h/2 );	break;    case SlRight:    a.setPoints(5, x1,y1, x2,y1, x2 + h/2, y1 + h/2,  x2,y2, x1,y2);	break;    }    p->setBrush(color1);    p->setPen(color1);    p->drawPolygon( a );}/*!\reimp */void QWindowsStyle::drawSliderGroove( QPainter *p,				      int x, int y, int w, int h,				      const QColorGroup& g, QCOORD c,				      Orientation orient ){    if ( orient == Horizontal ) {	qDrawWinPanel( p, x, y + c - 2,  w, 4, g, TRUE );	p->setPen( g.shadow() );	p->drawLine( x+1, y + c - 1, x + w - 3, y + c - 1 );    } else {	qDrawWinPanel( p, x + c - 2, y, 4, h, g, TRUE );	p->setPen( g.shadow() );	p->drawLine( x + c - 1, y + 1, x + c - 1, y + h - 3 );    }}/*!\reimp */int QWindowsStyle::maximumSliderDragDistance() const{    return 20;}/*! \reimp*/int QWindowsStyle::splitterWidth() const{    return QMAX( 6, QApplication::globalStrut().width() );}/*! \reimp*/void QWindowsStyle::drawSplitter( QPainter *p,  int x, int y, int w, int h,				  const QColorGroup &g,  Orientation){	qDrawWinPanel( p, x, y, w, h, g );}static const int motifItemFrame		= 2;	// menu item frame widthstatic const int motifSepHeight		= 2;	// separator item heightstatic const int motifItemHMargin	= 3;	// menu item hor text marginstatic const int motifItemVMargin	= 2;	// menu item ver text marginstatic const int motifArrowHMargin	= 6;	// arrow horizontal marginstatic const int motifTabSpacing	= 12;	// space between text and tabstatic const int motifCheckMarkHMargin	= 2;	// horiz. margins of check markstatic const int windowsRightBorder	= 12;       // right border on windowsstatic const int windowsCheckMarkWidth = 12;       // checkmarks width on windows/*! \reimp*/void QWindowsStyle::polishPopupMenu( QPopupMenu* p){#ifndef QT_NO_POPUPMENU    p->setMouseTracking( TRUE );    if ( !p->testWState( WState_Polished ) )	p->setCheckable( TRUE );    p->setLineWidth( 2 );#endif}/*! \reimp*/void QWindowsStyle::drawCheckMark( QPainter *p, int x, int y, int w, int h,				   const QColorGroup &g,				   bool act, bool dis ){    const int markW = w > 7 ? 7 : w;    const int markH = markW;    int posX = x + ( w - markW )/2 - 1;    int posY = y + ( h - markH )/2;    // Could do with some optimizing/caching...    QPointArray a( markH*2 );    int i, xx, yy;    xx = posX;    yy = 3 + posY;    for ( i=0; i<markW/2; i++ ) {	a.setPoint( 2*i,   xx, yy );	a.setPoint( 2*i+1, xx, yy+2 );	xx++; yy++;    }    yy -= 2;    for ( ; i<markH; i++ ) {	a.setPoint( 2*i,   xx, yy );	a.setPoint( 2*i+1, xx, yy+2 );	xx++; yy--;    }    if ( dis && !act ) {	int pnt;	p->setPen( g.highlightedText() );	QPoint offset(1,1);	for ( pnt = 0; pnt < (int)a.size(); pnt++ )	    a[pnt] += offset;	p->drawLineSegments( a );	for ( pnt = 0; pnt < (int)a.size(); pnt++ )	    a[pnt] -= offset;    }    p->setPen( g.text() );    p->drawLineSegments( a );}/*! \reimp*/int QWindowsStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ ){#ifndef QT_NO_POPUPMENU    int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm    if ( mi->isSeparator() )	return 10; // arbitrary    else if ( mi->pixmap() )	w += mi->pixmap()->width();	// pixmap only    if ( !mi->text().isNull() ) {	if ( mi->text().find('\t') >= 0 )	// string contains tab	    w += motifTabSpacing;    }    if ( maxpmw ) { // we have iconsets	w += maxpmw;	w += 6; // add a little extra border around the iconset    }    if ( checkable && maxpmw < windowsCheckMarkWidth ) {	w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks    }    if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks)	w += motifCheckMarkHMargin; // add space to separate the columns    w += windowsRightBorder; // windows has a strange wide border on the right side    return w;#else    return 0;#endif}/*! \reimp*/int QWindowsStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm ){#ifndef QT_NO_POPUPMENU        int h = 0;    if ( mi->isSeparator() )			// separator height	h = motifSepHeight;    else if ( mi->pixmap() )		// pixmap height	h = mi->pixmap()->height() + 2*motifItemFrame;    else					// text height	h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame;    if ( !mi->isSeparator() && mi->iconSet() != 0 ) {	h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame );    }    if ( mi->custom() )	h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame );    return h;#else    return 0;#endif}/*! \reimp*/void QWindowsStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,				       const QPalette& pal,				       bool act, bool enabled, int x, int y, int w, int h){#ifndef QT_NO_POPUPMENU        const QColorGroup & g = pal.active();    bool dis	  = !enabled;    QColorGroup itemg = dis ? pal.disabled() : pal.active();    if ( checkable ) {#if defined(_WS_WIN32_)	if ( qt_winver == Qt::WV_2000 || qt_winver == Qt::WV_98 )	    maxpmw = QMAX( maxpmw, 16);	else#endif	    maxpmw = QMAX( maxpmw, 12 ); // space for the checkmarks    }    int checkcol	  =     maxpmw;    if ( mi && mi->isSeparator() ) {			// draw separator	p->setPen( g.dark() );	p->drawLine( x, y, x+w, y );	p->setPen( g.light() );	p->drawLine( x, y+1, x+w, y+1 );	return;    }    QBrush fill = act? g.brush( QColorGroup::Highlight ) :			    g.brush( QColorGroup::Button );    p->fillRect( x, y, w, h, fill);    if ( !mi )	return;    if ( mi->isChecked() ) {	if ( act && !dis ) {	    qDrawShadePanel( p, x, y, checkcol, h,			     g, TRUE, 1, &g.brush( QColorGroup::Button ) );	} else {	    qDrawShadePanel( p, x, y, checkcol, h,			     g, TRUE, 1, &g.brush( QColorGroup::Midlight ) );	}    } else if ( !act ) {	p->fillRect(x, y, checkcol , h,		    g.brush( QColorGroup::Button ));    }    if ( mi->iconSet() ) {		// draw iconset	QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal;	if (act && !dis )	    mode = QIconSet::Active;	QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode );	int pixw = pixmap.width();	int pixh = pixmap.height();	if ( act && !dis ) {	    if ( !mi->isChecked() )		qDrawShadePanel( p, x, y, checkcol, h, g, FALSE,  1, &g.brush( QColorGroup::Button ) );	}	QRect cr( x, y, checkcol, h );	QRect pmr( 0, 0, pixw, pixh );	pmr.moveCenter( cr.center() );	p->setPen( itemg.text() );	p->drawPixmap( pmr.topLeft(), pixmap );	QBrush fill = act? g.brush( QColorGroup::Highlight ) :			      g.brush( QColorGroup::Button );	p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill);    } else  if ( checkable ) {	// just "checking"...	int mw = checkcol + motifItemFrame;	int mh = h - 2*motifItemFrame;	if ( mi->isChecked() ) {	    drawCheckMark( p, x + motifItemFrame,			   y+motifItemFrame, mw, mh, itemg, act, dis );	}    }    p->setPen( act ? g.highlightedText() : g.buttonText() );    QColor discol;    if ( dis ) {	discol = itemg.text();	p->setPen( discol );    }    int xm = motifItemFrame + checkcol + motifItemHMargin;    if ( mi->custom() ) {	int m = motifItemVMargin;	p->save();	if ( dis && !act ) {	    p->setPen( g.light() );	    mi->custom()->paint( p, itemg, act, enabled,				 x+xm+1, y+m+1, w-xm-tab+1, h-2*m );	    p->setPen( discol );	}	mi->custom()->paint( p, itemg, act, enabled,			     x+xm, y+m, w-xm-tab+1, h-2*m );	p->restore();    }    QString s = mi->text();    if ( !s.isNull() ) {			// draw text	int t = s.find( '\t' );	int m = motifItemVMargin;	const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine;	if ( t >= 0 ) {				// draw tab text	    if ( dis && !act ) {		p->setPen( g.light() );		p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1,			     y+m+1, tab, h-2*m, text_flags, s.mid( t+1 ));		p->setPen( discol );	    }	    p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame,			 y+m, tab, h-2*m, text_flags, s.mid( t+1 ) );	}	if ( dis && !act ) {	    p->setPen( g.light() );	    p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t );	    p->setPen( discol );	}	p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t );    } else if ( mi->pixmap() ) {			// draw pixmap	QPixmap *pixmap = mi->pixmap();	if ( pixmap->depth() == 1 )	    p->setBackgroundMode( OpaqueMode );	p->drawPixmap( x+xm, y+motifItemFrame, *pixmap );	if ( pixmap->depth() == 1 )	    p->setBackgroundMode( TransparentMode );    }    if ( mi->popup() ) {			// draw sub menu arrow	int dim = (h-2*motifItemFrame) / 2;	if ( act ) {	    if ( !dis )		discol = white;	    QColorGroup g2( discol, g.highlight(),			    white, white,			    dis ? discol : white,			    discol, white );	    drawArrow( p, RightArrow, FALSE,			       x+w - motifArrowHMargin - motifItemFrame - dim,  y+h/2-dim/2,			       dim, dim, g2, TRUE );	} else {	    drawArrow( p, RightArrow,			       FALSE,			       x+w - motifArrowHMargin - motifItemFrame - dim,  y+h/2-dim/2,			       dim, dim, g, mi->isEnabled() );	}    }#endif}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -