代码如下:
class lmmsStyle : public QPlastiqueStyle
{
public:
lmmsStyle();
virtual ~lmmsStyle()
{
}
virtual QPalette standardPalette( void ) const;
virtual void drawComplexControl(
ComplexControl control,
const QStyleOptionComplex * option,
QPainter *painter,
const QWidget *widget ) const;
virtual void drawPrimitive( PrimitiveElement element,
const QStyleOption *option,
QPainter *painter,
const QWidget *widget = 0 ) const;
virtual int pixelMetric( PixelMetric metric,
const QStyleOption * option = 0,
const QWidget * widget = 0 ) const;
} ;
实现为:
lmmsStyle
::lmmsStyle
():QPlastiqueStyle()
{
//QFile file("resources:style.css");
//file.open( QIODevice::ReadOnly);
//qApp->setStyleSheet(file.readAll());
qApp->setPalette(standardPalette());
}
QPalette lmmsStyle::standardPalette(void)const
{
QPalette pal = QPlastiqueStyle::standardPalette();
pal.setColor( QPalette::Background, QColor( 172, 176, 188 ) );
pal.setColor( QPalette::WindowText, QColor( 240, 240, 240 ) );
pal.setColor( QPalette::Base, QColor( 128, 128, 128 ) );
pal.setColor( QPalette::Text, QColor( 224, 224, 224 ) );
pal.setColor( QPalette::Button, QColor( 172, 176, 188 ) );
pal.setColor( QPalette::Shadow, QColor( 30, 30, 30 ) );
pal.setColor( QPalette::ButtonText, QColor( 255, 255, 255 ) );
pal.setColor( QPalette::BrightText, QColor( 20, 255, 20 ) );
pal.setColor( QPalette::Highlight, QColor( 204, 204, 204 ) );
pal.setColor( QPalette::HighlightedText, QColor( 0, 0, 0 ) );
return(pal);
}
void lmmsStyle::drawComplexControl(ComplexControl control,
const QStyleOptionComplex * option,
QPainter *painter,
const QWidget *widget ) const
{
// fix broken titlebar styling on win32
if( control == CC_TitleBar )
{
const QStyleOptionTitleBar * titleBar =
qstyleoption_cast<const QStyleOptionTitleBar *>(option );
if( titleBar )
{
QStyleOptionTitleBar so( *titleBar );
so.palette = standardPalette();
so.palette.setColor( QPalette::HighlightedText,
( titleBar->titleBarState & State_Active ) ?
QColor( 205, 205, 205 ) :
QColor( 192, 212, 152 ) );
so.palette.setColor( QPalette::Text,
QColor( 74, 74, 74 ) );
QPlastiqueStyle::drawComplexControl( control, &so,
painter, widget );
return;
}
}
QPlastiqueStyle::drawComplexControl( control, option, painter, widget );
}
void lmmsStyle::drawPrimitive( PrimitiveElement element,
const QStyleOption *option, QPainter *painter,
const QWidget *widget) const
{
if( element == QStyle::PE_Frame ||
element == QStyle::PE_FrameLineEdit ||
element == QStyle::PE_PanelLineEdit )
{
const QRect rect = option->rect;
QColor black = QColor( 10, 10, 10 );
QColor shadow = option->palette.shadow().color();
QColor highlight = option->palette.highlight().color();
int a100 = 165;
int a75 = static_cast<int>( a100 * .75 );
int a50 = static_cast<int>( a100 * .6 );
int a25 = static_cast<int>( a100 * .33 );
QLine lines[4];
QPoint points[4];
// black inside lines
// 50%
black.setAlpha(a100);
painter->setPen(QPen(black, 0));
lines[0] = QLine(rect.left() + 2, rect.top() + 1,
rect.right() - 2, rect.top() + 1);
lines[1] = QLine(rect.left() + 2, rect.bottom() - 1,
rect.right() - 2, rect.bottom() - 1);
lines[2] = QLine(rect.left() + 1, rect.top() + 2,
rect.left() + 1, rect.bottom() - 2);
lines[3] = QLine(rect.right() - 1, rect.top() + 2,
rect.right() - 1, rect.bottom() - 2);
painter->drawLines(lines, 4);
// black inside dots
black.setAlpha(a50);
painter->setPen(QPen(black, 0));
points[0] = QPoint(rect.left() + 2, rect.top() + 2);
points[1] = QPoint(rect.left() + 2, rect.bottom() - 2);
points[2] = QPoint(rect.right() - 2, rect.top() + 2);
points[3] = QPoint(rect.right() - 2, rect.bottom() - 2);
painter->drawPoints(points, 4);
// outside lines - shadow
// 100%
shadow.setAlpha(a75);
painter->setPen(QPen(shadow, 0));
lines[0] = QLine(rect.left() + 2, rect.top(),
rect.right() - 2, rect.top());
lines[1] = QLine(rect.left(), rect.top() + 2,
rect.left(), rect.bottom() - 2);
painter->drawLines(lines, 2);
// outside corner dots - shadow
// 75%
shadow.setAlpha(a50);
painter->setPen(QPen(shadow, 0));
points[0] = QPoint(rect.left() + 1, rect.top() + 1);
points[1] = QPoint(rect.right() - 1, rect.top() + 1);
painter->drawPoints(points, 2);
// outside end dots - shadow
// 50%
shadow.setAlpha(a25);
painter->setPen(QPen(shadow, 0));
points[0] = QPoint(rect.left() + 1, rect.top());
points[1] = QPoint(rect.left(), rect.top() + 1);
points[2] = QPoint(rect.right() - 1, rect.top());
points[3] = QPoint(rect.left(), rect.bottom() - 1);
painter->drawPoints(points, 4);
// outside lines - highlight
// 100%
highlight.setAlpha(a75);
painter->setPen(QPen(highlight, 0));
lines[0] = QLine(rect.left() + 2, rect.bottom(),
rect.right() - 2, rect.bottom());
lines[1] = QLine(rect.right(), rect.top() + 2,
rect.right(), rect.bottom() - 2);
painter->drawLines(lines, 2);
// outside corner dots - highlight
// 75%
highlight.setAlpha(a50);
painter->setPen(QPen(highlight, 0));
points[0] = QPoint(rect.left() + 1, rect.bottom() - 1);
points[1] = QPoint(rect.right() - 1, rect.bottom() - 1);
painter->drawPoints(points, 2);
// outside end dots - highlight
// 50%
highlight.setAlpha(a25);
painter->setPen(QPen(highlight, 0));
points[0] = QPoint(rect.right() - 1, rect.bottom());
points[1] = QPoint(rect.right(), rect.bottom() - 1);
points[2] = QPoint(rect.left() + 1, rect.bottom());
points[3] = QPoint(rect.right(), rect.top() + 1);
painter->drawPoints(points, 4);
}
else
{
QPlastiqueStyle::drawPrimitive( element, option, painter,
widget );
}
}
int lmmsStyle::pixelMetric( PixelMetric _metric, const QStyleOption * _option,
const QWidget * _widget ) const
{
switch( _metric )
{
case QStyle::PM_ButtonMargin:
return 3;
case QStyle::PM_ButtonIconSize:
return 20;
case QStyle::PM_ToolBarItemMargin:
return 1;
case QStyle::PM_ToolBarItemSpacing:
return 2;
case QStyle::PM_TitleBarHeight:
return 24;
default:
return QPlastiqueStyle::pixelMetric( _metric, _option,
_widget );
}
}