本文整理汇总了C++中QColorGroup::foreground方法的典型用法代码示例。如果您正苦于以下问题:C++ QColorGroup::foreground方法的具体用法?C++ QColorGroup::foreground怎么用?C++ QColorGroup::foreground使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QColorGroup
的用法示例。
在下文中一共展示了QColorGroup::foreground方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: paintCell
// Overridden to highlight the changed items
void VarItem::paintCell(QPainter *p, const QColorGroup &cg,
int column, int width, int align)
{
if (p == 0) {
return;
}
if (column == VALUE_COLUMN) {
// Show color values as colors, and make the text color the same
// as the base color
if (dataType_ == COLOR_TYPE) {
QRegExp color_re("\\s(#.*)>");
if (color_re.search(text(column)) != -1) {
QColorGroup color_cg( cg.foreground(), cg.background(),
cg.light(), cg.dark(), cg.mid(),
QColor(color_re.cap(1)), QColor(color_re.cap(1)) );
QListViewItem::paintCell(p, color_cg, column, width, align);
return;
}
}
// Highlight recently changed items in red
if (highlight_) {
QColorGroup hl_cg( cg.foreground(), cg.background(),
cg.light(), cg.dark(), cg.mid(),
red, cg.base() );
QListViewItem::paintCell(p, hl_cg, column, width, align);
return;
}
}
QListViewItem::paintCell(p, cg, column, width, align);
return;
}
示例2: drawIndicator
/*!\reimp
*/
void QCDEStyle::drawIndicator( QPainter* p,
int x, int y, int w, int h, const QColorGroup &g,
int s, bool down, bool /* enabled */ )
{
bool showUp = !down && s == QButton::Off;
QBrush fill = down ? g.brush( QColorGroup::Mid ) :
g.brush( QColorGroup::Button );
qDrawShadePanel( p, x, y, w, h, g, !showUp, defaultFrameWidth(), &fill );
if (s != QButton::Off) {
QPointArray a( 7*2 );
int i, xx, yy;
xx = x+3;
yy = y+5;
for ( i=0; i<3; i++ ) {
a.setPoint( 2*i, xx, yy );
a.setPoint( 2*i+1, xx, yy+2 );
xx++; yy++;
}
yy -= 2;
for ( i=3; i<7; i++ ) {
a.setPoint( 2*i, xx, yy );
a.setPoint( 2*i+1, xx, yy+2 );
xx++; yy--;
}
if ( s == QButton::NoChange )
p->setPen( g.dark() );
else
p->setPen( g.foreground() );
p->drawLineSegments( a );
}
}
示例3: paintCell
// Reimplemented
void QmvItem::paintCell( QPainter *p, const QColorGroup &cg,
int column, int width, int alignment )
{
QListView *listview = listView();
QColorGroup g( cg );
g.setColor( QColorGroup::Base, backgroundColor() );
g.setColor( QColorGroup::Foreground, Qt::black );
g.setColor( QColorGroup::Text, Qt::black );
int indent = 0;
if ( column == 0 ) {
indent = 20 + (shuttletupleattribute ? 20 : 0 );
p->fillRect( 0, 0, width, height(), backgroundColor() );
p->save();
p->translate( indent, 0 );
}
if ( isChanged() && column == 0 ) {
p->save();
QFont f = p->font();
f.setBold( TRUE );
p->setFont( f );
}
if ( !hasCustomContents() || column != 1 ) {
QListViewItem::paintCell( p, g, column, width - indent, alignment );
} else {
p->fillRect( 0, 0, width, height(), backgroundColor() );
drawCustomContents( p, QRect( 0, 0, width, height() ) );
}
if ( isChanged() && column == 0 )
p->restore();
if ( column == 0 )
p->restore();
// Draw +/- open/close control icon on tuple items
if ( !shuttletupleattribute && column == 0 ) {
p->save();
p->setPen( cg.foreground() );
p->setBrush( cg.base() );
p->drawRect( 5, height() / 2 - 4, 9, 9 );
p->drawLine( 7, height() / 2, 11, height() / 2 );
if ( !isOpen() )
p->drawLine( 9, height() / 2 - 2, 9, height() / 2 + 2 );
p->restore();
}
p->save();
p->setPen( QPen( cg.dark(), 1 ) );
p->drawLine( 0, height() - 1, width, height() - 1 );
p->drawLine( width - 1, 0, width - 1, height() );
p->restore();
if ( listview->currentItem() == this && column == 0 &&
!listview->hasFocus() && !listview->viewport()->hasFocus() )
paintFocus( p, cg, QRect( 0, 0, width, height() ) );
}
示例4: paintCell
virtual void paintCell(QPainter *p, const QColorGroup &cg,
int column, int width, int alignment)
{
#if 0 // disabled - not overriding correct method
if (column == 2)
{
toProfilerUnits *units = dynamic_cast<toProfilerUnits *>(listView());
if (!units)
{
toTreeWidgetItem::paintCell(p, cg, column, width, alignment);
return ;
}
double total = allText(column).toDouble();
QString timstr = FormatTime(total / 1E9);
double val = total / units->total();
p->fillRect(0, 0, int(val*width), height(), QBrush(Qt::blue));
p->fillRect(int(val*width), 0, width, height(),
QBrush(isSelected() ? cg.highlight() : cg.base()));
QPen pen(isSelected() ? cg.highlightedText() : cg.foreground());
p->setPen(pen);
p->drawText(0, 0, width, height(), Qt::AlignRight, timstr);
}
else
{
toTreeWidgetItem::paintCell(p, cg, column, width, alignment);
}
#endif
}
示例5: fill
/*!\reimp
*/
void
QWindowsStyle::drawPushButton( QPushButton* btn, QPainter *p)
{
#ifndef QT_NO_PUSHBUTTON
QColorGroup g = btn->colorGroup();
int x1, y1, x2, y2;
btn->rect().coords( &x1, &y1, &x2, &y2 ); // get coordinates
p->setPen( g.foreground() );
p->setBrush( QBrush(g.button(),NoBrush) );
int diw = buttonDefaultIndicatorWidth();
if ( btn->isDefault() || btn->autoDefault() ) {
if ( btn->isDefault() ) {
p->setPen( g.shadow() );
p->drawRect( x1, y1, x2-x1+1, y2-y1+1 );
}
x1 += diw;
y1 += diw;
x2 -= diw;
y2 -= diw;
}
bool clearButton = TRUE;
if ( btn->isDown() ) {
if ( btn->isDefault() ) {
p->setPen( g.dark() );
p->drawRect( x1, y1, x2-x1+1, y2-y1+1 );
} else {
drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE,
&g.brush( QColorGroup::Button ) );
}
} else {
if ( btn->isToggleButton() && btn->isOn() && btn->isEnabled() ) {
QBrush fill(g.light(), Dense4Pattern );
drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, TRUE, &fill );
clearButton = FALSE;
} else {
if ( !btn->isFlat() )
drawButton( p, x1, y1, x2-x1+1, y2-y1+1, g, btn->isOn(),
&g.brush( QColorGroup::Button ) );
}
}
if ( clearButton ) {
if (btn->isDown())
p->setBrushOrigin(p->brushOrigin() + QPoint(1,1));
p->fillRect( x1+2, y1+2, x2-x1-3, y2-y1-3,
g.brush( QColorGroup::Button ) );
if (btn->isDown())
p->setBrushOrigin(p->brushOrigin() - QPoint(1,1));
}
if ( p->brush().style() != NoBrush )
p->setBrush( NoBrush );
#endif
}
示例6: HTMLColors
HTMLColors()
{
map["black"] = "#000000";
map["green"] = "#008000";
map["silver"] = "#c0c0c0";
map["lime"] = "#00ff00";
map["gray"] = "#808080";
map["olive"] = "#808000";
map["white"] = "#ffffff";
map["yellow"] = "#ffff00";
map["maroon"] = "#800000";
map["navy"] = "#000080";
map["red"] = "#ff0000";
map["blue"] = "#0000ff";
map["purple"] = "#800080";
map["teal"] = "#008080";
map["fuchsia"] = "#ff00ff";
map["aqua"] = "#00ffff";
map["crimson"] = "#dc143c";
map["indigo"] = "#4b0082";
#ifdef __BEOS__
printf( "Warning: HTMLColors::HTMLColors() not initiating all colors\n" );
#else
// ### react to style changes
// see http://www.richinstyle.com for details
QColorGroup cg = kapp->palette().active();
map["activeborder"] = cg.light(); // bordercolor of an active window
map["activecaption"] = cg.text(); // caption color of an active window
map["appworkspace"] = cg.background(); // background color of an MDI interface
map["highlight"] = cg.highlight();
map["highlighttext"] = cg.highlightedText();
cg = kapp->palette().inactive();
map["background"] = cg.background(); // desktop background color
map["buttonface"] = cg.button(); // Button background color
map["buttonhighlight"] = cg.light();
map["buttonshadow"] = cg.shadow();
map["buttontext"] = cg.buttonText();
map["captiontext"] = cg.text();
map["infobackground"] = QToolTip::palette().inactive().background();
map["menu"] = cg.background();
map["menutext"] = cg.foreground();
map["scrollbar"] = cg.background();
map["threeddarkshadow"] = cg.dark();
map["threedface"] = cg.button();
map["threedhighlight"] = cg.light();
map["threedlightshadow"] = cg.midlight();
map["window"] = cg.background();
map["windowframe"] = cg.background();
map["text"] = cg.text();
cg = kapp->palette().disabled();
map["inactiveborder"] = cg.background();
map["inactivecaption"] = cg.background();
map["inactivecaptiontext"] = cg.text();
map["graytext"] = cg.text();
#endif
};
示例7: qDrawWinArrow
static void qDrawWinArrow( QPainter *p, Qt::ArrowType type, bool down,
int x, int y, int w, int h,
const QColorGroup &g, bool enabled )
{
QPointArray a; // arrow polygon
switch ( type ) {
case Qt::UpArrow:
a.setPoints( 7, -3,1, 3,1, -2,0, 2,0, -1,-1, 1,-1, 0,-2 );
break;
case Qt::DownArrow:
a.setPoints( 7, -3,-1, 3,-1, -2,0, 2,0, -1,1, 1,1, 0,2 );
break;
case Qt::LeftArrow:
a.setPoints( 7, 1,-3, 1,3, 0,-2, 0,2, -1,-1, -1,1, -2,0 );
break;
case Qt::RightArrow:
a.setPoints( 7, -1,-3, -1,3, 0,-2, 0,2, 1,-1, 1,1, 2,0 );
break;
}
if ( a.isNull() )
return;
if ( down ) {
x++;
y++;
}
QPen savePen = p->pen(); // save current pen
if (down)
p->setBrushOrigin(p->brushOrigin() + QPoint(1,1));
p->fillRect( x, y, w, h, g.brush( QColorGroup::Button ) );
if (down)
p->setBrushOrigin(p->brushOrigin() - QPoint(1,1));
if ( enabled ) {
a.translate( x+w/2, y+h/2 );
p->setPen( g.foreground() );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
} else {
a.translate( x+w/2+1, y+h/2+1 );
p->setPen( g.light() );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
a.translate( -1, -1 );
p->setPen( g.mid() );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
}
p->setPen( savePen ); // restore pen
}
示例8: drawTicks
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;
}
}
示例9: qDrawItem
void qDrawItem( QPainter *p, Qt::GUIStyle gs,
int x, int y, int w, int h,
int flags,
const QColorGroup &g, bool enabled,
const QPixmap *pixmap,
const QString& text, int len , const QColor* penColor )
{
p->setPen( penColor?*penColor:g.foreground() );
if ( pixmap ) {
QPixmap pm( *pixmap );
bool clip = (flags & Qt::DontClip) == 0;
if ( clip ) {
if ( pm.width() < w && pm.height() < h )
clip = FALSE;
else
p->setClipRect( x, y, w, h );
}
if ( (flags & Qt::AlignVCenter) == Qt::AlignVCenter )
y += h/2 - pm.height()/2;
else if ( (flags & Qt::AlignBottom) == Qt::AlignBottom)
y += h - pm.height();
if ( (flags & Qt::AlignRight) == Qt::AlignRight )
x += w - pm.width();
else if ( (flags & Qt::AlignHCenter) == Qt::AlignHCenter )
x += w/2 - pm.width()/2;
else if ( ((flags & Qt::AlignLeft) != Qt::AlignLeft) && QApplication::reverseLayout() ) // AlignAuto && rightToLeft
x += w - pm.width();
if ( !enabled ) {
if ( pm.mask() ) { // pixmap with a mask
if ( !pm.selfMask() ) { // mask is not pixmap itself
QPixmap pmm( *pm.mask() );
pmm.setMask( *((QBitmap *)&pmm) );
pm = pmm;
}
} else if ( pm.depth() == 1 ) { // monochrome pixmap, no mask
pm.setMask( *((QBitmap *)&pm) );
#ifndef QT_NO_IMAGE_HEURISTIC_MASK
} else { // color pixmap, no mask
QString k;
k.sprintf( "$qt-drawitem-%x", pm.serialNumber() );
QPixmap *mask = QPixmapCache::find(k);
bool del=FALSE;
if ( !mask ) {
mask = new QPixmap( pm.createHeuristicMask() );
mask->setMask( *((QBitmap*)mask) );
del = !QPixmapCache::insert( k, mask );
}
pm = *mask;
if (del) delete mask;
#endif
}
if ( gs == Qt::WindowsStyle ) {
p->setPen( g.light() );
p->drawPixmap( x+1, y+1, pm );
p->setPen( g.text() );
}
}
p->drawPixmap( x, y, pm );
if ( clip )
p->setClipping( FALSE );
} else if ( !text.isNull() ) {
if ( gs == Qt::WindowsStyle && !enabled ) {
p->setPen( g.light() );
p->drawText( x+1, y+1, w, h, flags, text, len );
p->setPen( g.text() );
}
p->drawText( x, y, w, h, flags, text, len );
}
}
示例10: paintEvent
void QLineEdit::paintEvent( QPaintEvent *e )
{
if ( !d->pm || d->pmDirty ) {
if ( !d->pm )
d->pm = new QPixmap( size() );
QPainter p( d->pm, this );
QColorGroup g = colorGroup();
QColor bg = isEnabled() ? g.base() : g.background();
QFontMetrics fm = fontMetrics();
int markBegin = minMark();
int markEnd = maxMark();
int margin = frame() ? 2 : 0;
if ( frame() ) {
QBrush fill( bg );
qDrawWinPanel( &p, 0, 0, width(), height(), g, TRUE, &fill );
} else {
p.fillRect( 0, 0, width(), height(), bg );
}
QString displayText;
switch( echoMode() ) {
case Normal:
displayText = tbuf.mid( offset, tbuf.length() );
break;
case NoEcho:
displayText = "";
break;
case Password:
displayText.fill( '*', tbuf.length() - offset );
break;
}
int ypos = height() - margin - fm.descent() - 1 -
(height() - 2*margin - fm.height())/2;
if ( !displayText.isEmpty() ) {
int charsVisible = lastCharVisible() - offset;
if ( displayText[ charsVisible ] != '\0' )
charsVisible++;
int mark1,mark2;
if ( markBegin > offset ) {
if ( markBegin < offset + charsVisible )
mark1 = markBegin - offset;
else
mark1 = charsVisible;
} else {
mark1 = 0;
}
if ( markEnd > offset ) {
if ( markEnd < offset + charsVisible )
mark2 = markEnd - offset;
else
mark2 = charsVisible;
} else {
mark2 = 0;
}
// display code comes here - a bit yucky but it works
if ( mark1 != mark2 ) {
QString marked( displayText.mid( mark1, mark2 - mark1 ) );
int xpos1 = margin + 2 + fm.width( displayText, mark1 );
int xpos2 = xpos1 + fm.width( marked ) - 1;
p.fillRect( xpos1, ypos - fm.ascent(),
xpos2 - xpos1, fm.height(),
style() == WindowsStyle
? QApplication::winStyleHighlightColor()
: g.text() );
p.setPen( style() == WindowsStyle ? white : g.base() );
p.drawText( xpos1, ypos, marked );
}
p.setPen( g.text() );
if ( mark1 != 0 )
p.drawText( margin + 2, ypos, displayText, mark1 );
if ( mark2 != charsVisible ) {
QString rest( displayText.mid( mark2, charsVisible - mark2 ) );
p.drawText( margin + 2 + fm.width( displayText.left( mark2) ),
ypos, rest );
}
}
p.setPen( g.foreground() );
int curXPos = margin + 2;
if ( echoMode() != NoEcho )
curXPos += offset > cursorPos ? -1 : // ?: for scrolling case
fm.width( displayText, cursorPos - offset ) - 1;
int curYPos = ypos - fm.ascent();
d->cursorRepaintRect.setRect( curXPos-2, curYPos, 5, fm.height() );
d->pmDirty = FALSE;
}
bitBlt( this, e->rect().topLeft(), d->pm, e->rect() );
if ( hasFocus() ) {
if ( cursorOn && d->cursorRepaintRect.intersects( e->rect() ) ) {
//.........这里部分代码省略.........
示例11: drawControl
void MetalStyle::drawControl( ControlElement element,
QPainter *p,
const QWidget *widget,
const QRect &r,
const QColorGroup &cg,
SFlags how,
const QStyleOption& opt ) const
{
switch( element ) {
case CE_PushButton:
{
const QPushButton *btn;
btn = (const QPushButton*)widget;
int x1, y1, x2, y2;
r.coords( &x1, &y1, &x2, &y2 );
p->setPen( cg.foreground() );
p->setBrush( QBrush(cg.button(), NoBrush) );
QBrush fill;
if ( btn->isDown() )
fill = cg.brush( QColorGroup::Mid );
else if ( btn->isOn() )
fill = QBrush( cg.mid(), Dense4Pattern );
else
fill = cg.brush( QColorGroup::Button );
if ( btn->isDefault() ) {
QPointArray a;
a.setPoints( 9,
x1, y1, x2, y1, x2, y2, x1, y2, x1, y1+1,
x2-1, y1+1, x2-1, y2-1, x1+1, y2-1, x1+1, y1+1 );
p->setPen( Qt::black );
p->drawPolyline( a );
x1 += 2;
y1 += 2;
x2 -= 2;
y2 -= 2;
}
SFlags flags = Style_Default;
if ( btn->isOn() )
flags |= Style_On;
if ( btn->isDown() )
flags |= Style_Down;
if ( !btn->isFlat() && !btn->isDown() )
flags |= Style_Raised;
drawPrimitive( PE_ButtonCommand, p,
QRect( x1, y1, x2 - x1 + 1, y2 - y1 + 1),
cg, flags, opt );
if ( btn->isMenuButton() ) {
flags = Style_Default;
if ( btn->isEnabled() )
flags |= Style_Enabled;
int dx = ( y1 - y2 - 4 ) / 3;
drawPrimitive( PE_ArrowDown, p,
QRect(x2 - dx, dx, y1, y2 - y1),
cg, flags, opt );
}
if ( p->brush().style() != NoBrush )
p->setBrush( NoBrush );
break;
}
case CE_PushButtonLabel:
{
const QPushButton *btn;
btn = (const QPushButton*)widget;
int x, y, w, h;
r.rect( &x, &y, &w, &h );
int x1, y1, x2, y2;
r.coords( &x1, &y1, &x2, &y2 );
int dx = 0;
int dy = 0;
if ( btn->isMenuButton() )
dx = ( y2 - y1 ) / 3;
if ( btn->isOn() || btn->isDown() ) {
dx--;
dy--;
}
if ( dx || dy )
p->translate( dx, dy );
x += 2;
y += 2;
w -= 4;
h -= 4;
drawItem( p, QRect( x, y, w, h ),
AlignCenter|ShowPrefix,
cg, btn->isEnabled(),
btn->pixmap(), btn->text(), -1,
(btn->isDown() || btn->isOn())? &cg.brightText() : &cg.buttonText() );
if ( dx || dy )
p->translate( -dx, -dy );
break;
}
default:
QWindowsStyle::drawControl( element, p, widget, r, cg, how, opt );
//.........这里部分代码省略.........
示例12: drawComplexControl
//.........这里部分代码省略.........
p->setPen( cg.mid() );
p->drawLine( xx+3, yy+hh-3 ,xx+ww-3, yy+hh-3 );
p->drawLine( xx+ww-3, yy+3, xx+ww-3, yy+hh-3 );
p->setPen( cg.dark() );
p->drawLine( xx+2, yy+hh-2 ,xx+ww-2, yy+hh-2 );
p->drawLine( xx+ww-2, yy+2, xx+ww-2, yy+hh-2 );
p->setPen( cg.shadow() );
p->drawLine( xx+1, yy+hh-1,xx+ww-1, yy+hh-1 );
p->drawLine( xx+ww-1, yy, xx+ww-1, yy+hh-1 );
// top right corner:
p->setPen( cg.background() );
p->drawPoint( xx + ww - 1, yy );
p->drawPoint( xx + ww - 2, yy );
p->drawPoint( xx + ww - 1, yy + 1 );
p->setPen( cg.shadow() );
p->drawPoint( xx + ww - 2, yy + 1 );
// bottom right corner:
p->setPen( cg.background() );
p->drawPoint( xx + ww - 1, yy + hh - 1 );
p->drawPoint( xx + ww - 2, yy + hh - 1 );
p->drawPoint( xx + ww - 1, yy + hh - 2 );
p->setPen( cg.shadow() );
p->drawPoint( xx + ww - 2, yy + hh - 2 );
p->setPen( cg.dark() );
p->drawPoint( xx + ww - 3, yy + hh - 3 );
p->setPen( cg.mid() );
p->drawPoint( xx + ww - 4, yy + hh - 4 );
// and the arrows
p->setPen( cg.foreground() );
QPointArray a ;
a.setPoints( 7, -3,1, 3,1, -2,0, 2,0, -1,-1, 1,-1, 0,-2 );
a.translate( xx + ww / 2, yy + hh / 2 - 3 );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
a.setPoints( 7, -3,-1, 3,-1, -2,0, 2,0, -1,1, 1,1, 0,2 );
a.translate( xx + ww / 2, yy + hh / 2 + 2 );
p->drawLineSegments( a, 0, 3 ); // draw arrow
p->drawPoint( a[6] );
}
#ifndef QT_NO_COMBOBOX
if ( sub & SC_ComboBoxEditField ) {
const QComboBox *cmb;
cmb = (const QComboBox*)widget;
// sadly this is pretty much the windows code, except
// for the first fillRect call...
QRect re =
QStyle::visualRect( querySubControlMetrics( CC_ComboBox,
widget,
SC_ComboBoxEditField ),
widget );
if ( cmb->hasFocus() && !cmb->editable() )
p->fillRect( re.x() + 1, re.y() + 1,
re.width() - 2, re.height() - 2,
cg.brush( QColorGroup::Highlight ) );
if ( cmb->hasFocus() ) {
p->setPen( cg.highlightedText() );
p->setBackgroundColor( cg.highlight() );
} else {
p->setPen( cg.text() );
示例13: drawPrimitive
//.........这里部分代码省略.........
p->drawRect( r.x(), r.y(), r.width() - 2, r.height() );
static const QCOORD nochange_mark[] = { 3,5, 9,5, 3,6, 9,6 };
static const QCOORD check_mark[] = {
3,5, 5,5, 4,6, 5,6, 5,7, 6,7, 5,8, 6,8, 6,9, 9,9,
6,10, 8,10, 7,11, 8,11, 7,12, 7,12, 8,8, 9,8, 8,7, 10,7,
9,6, 10,6, 9,5, 11,5, 10,4, 11,4, 10,3, 12,3,
11,2, 12,2, 11,1, 13,1, 12,0, 13,0 };
if ( !(flags & Style_Off) ) {
QPen oldPen = p->pen();
int x1 = r.x();
int y1 = r.y();
if ( flags & Style_Down ) {
x1++;
y1++;
}
QPointArray amark;
if ( flags & Style_On ) {
amark = QPointArray( sizeof(check_mark)/(sizeof(QCOORD)*2),
check_mark );
// ### KLUDGE!!
flags ^= Style_On;
flags ^= Style_Down;
} else if ( flags & Style_NoChange ) {
amark = QPointArray( sizeof(nochange_mark)
/ (sizeof(QCOORD) * 2),
nochange_mark );
}
amark.translate( x1 + 1, y1 + 1 );
p->setPen( cg.dark() );
p->drawLineSegments( amark );
amark.translate( -1, -1 );
p->setPen( cg.foreground() );
p->drawLineSegments( amark );
p->setPen( oldPen );
}
break;
}
case PE_IndicatorMask:
{
int x,
y,
w,
h;
r.rect( &x, &y, &w, &h );
p->fillRect( x, y, w - 2, h, color1);
if ( flags & Style_Off ) {
QPen oldPen = p->pen();
p->setPen ( QPen(color1, 2));
p->drawLine( x + 2, y + h / 2 - 1,
x + w / 2 - 1, y + h - 4 );
p->drawLine( x + w / 2 - 1, y + h - 4,
x + w, 0);
p->setPen( oldPen );
}
break;
}
case PE_ExclusiveIndicator:
{
#define QCOORDARRLEN(x) sizeof(x) / (sizeof(QCOORD) * 2 )
bool down = flags & Style_Down;
bool on = flags & Style_On;
static const QCOORD pts1[] = { // normal circle
5,0, 8,0, 9,1, 10,1, 11,2, 12,3, 12,4, 13,5,
示例14: drawControl
/*!\reimp
*/
void QPlatinumStyle::drawControl( ControlElement element,
QPainter *p,
const QWidget *widget,
const QRect &r,
const QColorGroup &cg,
SFlags how,
const QStyleOption& opt ) const
{
switch( element ) {
case CE_PushButton:
{
#ifndef QT_NO_PUSHBUTTON
QColorGroup myCg( cg );
const QPushButton *btn;
int x1, y1, x2, y2;
bool useBevelButton;
SFlags flags;
flags = Style_Default;
btn = (const QPushButton*)widget;
p->setBrushOrigin( -widget->backgroundOffset().x(),
-widget->backgroundOffset().y() );
// take care of the flags based on what we know...
if ( btn->isDown() )
flags |= Style_Down;
if ( btn->isOn() )
flags |= Style_On;
if ( btn->isEnabled() )
flags |= Style_Enabled;
if ( btn->isDefault() )
flags |= Style_Default;
if (! btn->isFlat() && !(flags & Style_Down))
flags |= Style_Raised;
r.coords( &x1, &y1, &x2, &y2 );
p->setPen( cg.foreground() );
p->setBrush( QBrush(cg.button(), NoBrush) );
QBrush fill;
if ( btn->isDown() ) {
fill = cg.brush( QColorGroup::Dark );
// this could be done differently, but this
// makes a down Bezel drawn correctly...
myCg.setBrush( QColorGroup::Mid, fill );
} else if ( btn->isOn() ) {
fill = QBrush( cg.mid(), Dense4Pattern );
myCg.setBrush( QColorGroup::Mid, fill );
}
// to quote the old QPlatinumStlye drawPushButton...
// small or square image buttons as well as toggle buttons are
// bevel buttons (what a heuristic....)
if ( btn->isToggleButton()
|| ( btn->pixmap() &&
(btn->width() * btn->height() < 1600 ||
QABS( btn->width() - btn->height()) < 10 )) )
useBevelButton = TRUE;
else
useBevelButton = FALSE;
int diw = pixelMetric( PM_ButtonDefaultIndicator, widget );
if ( btn->isDefault() ) {
x1 += 1;
y1 += 1;
x2 -= 1;
y2 -= 1;
QColorGroup cg2( myCg );
SFlags myFlags = flags;
// don't draw the default button sunken, unless it's necessary.
if ( myFlags & Style_Down )
myFlags ^= Style_Down;
if ( myFlags & Style_Sunken )
myFlags ^= Style_Sunken;
cg2.setColor( QColorGroup::Button, cg.mid() );
if ( useBevelButton ) {
drawPrimitive( PE_ButtonBevel, p, QRect( x1, y1,
x2 - x1 + 1,
y2 - y1 + 1 ),
myCg, myFlags, opt );
} else {
drawPrimitive( PE_ButtonCommand, p, QRect( x1, y1,
x2 - x1 + 1,
y2 - y1 + 1 ),
cg2, myFlags, opt );
}
}
if ( btn->isDefault() || btn->autoDefault() ) {
x1 += diw;
y1 += diw;
x2 -= diw;
y2 -= diw;
}
if ( !btn->isFlat() || btn->isOn() || btn->isDown() ) {
if ( useBevelButton ) {
// fix for toggle buttons...
//.........这里部分代码省略.........