Qt 编程点滴7
2012-10-12 09:22
323 查看
QPainterPath 画出的图形会闪烁的问题:
用下面的写法画出的图形会闪烁
如下用下面的写法则不会闪烁:
用下面的写法画出的图形会闪烁
class MyClass: public QWidget { public: MyClass(QWidget*); private: QPainterPath* route; void paintEvent(QPaintEvent*e); }; MyClass::MyClass() { route = new QPainterPath(); } void MyClass::paintEvent( QPaintEvent*e) { QPainter *painter = new QPainter(this); //画校正图形 int insideR = 30; int outsideR = 50; QColor insideColor(237,29,12); //内圆线条颜色 QColor outSideColor(237,29,12); //外圆线条颜色 QColor lineColor(237,29,12); //直线颜色 QColor insideBrushColor(255,0,0,25);//内圆画刷颜色,最后的参数代表透明度( 0(完全透明)-100(不透明) ) QColor outsideBrushColor(255,0,0,50);//外圆画刷颜色,最后的参数代表透明度( 0(完全透明)-100(不透明) ) //QPainterPath path; route->moveTo(insideR,0); route->lineTo(outsideR,0); route->arcTo(0-outsideR,0-outsideR,outsideR*2,outsideR*2,0,180); route->lineTo(0-insideR,0); route->arcTo(0-insideR,0-insideR,insideR*2,insideR*2,0,180); route->moveTo(0-insideR,0); route->lineTo(0-outsideR,0); route->arcTo(0-outsideR,0-outsideR,outsideR*2,outsideR*2,180,180); route->lineTo(insideR,0); route->arcTo(0-insideR,0-insideR,insideR*2,insideR*2,180,180); painter->setPen(Qt::NoPen); painter->setBrush(outsideBrushColor); painter->drawPath(*route); painter->setBrush(Qt::NoBrush); painter->setPen(outSideColor); painter->drawEllipse( QPointF(0,0),outsideR,outsideR ); painter->setBrush(insideBrushColor); painter->setPen(insideColor); painter->drawEllipse( QPointF(0,0),insideR,insideR ); painter->setPen(lineColor); QPoint p1(0, 0- outsideR - 10 ); QPoint p2(0, outsideR + 10 ); painter->drawLine(p1,p2); painter->rotate(90); painter->drawLine(p1,p2); painter->rotate(-90); delete painter; }
如下用下面的写法则不会闪烁:
void MyClass::paintEvent( QPaintEvent*e) { QPainter *painter = new QPainter(this); //画校正图形 int insideR = 30; int outsideR = 50; QColor insideColor(237,29,12); //内圆线条颜色 QColor outSideColor(237,29,12); //外圆线条颜色 QColor lineColor(237,29,12); //直线颜色 QColor insideBrushColor(255,0,0,25);//内圆画刷颜色,最后的参数代表透明度( 0(完全透明)-100(不透明) ) QColor outsideBrushColor(255,0,0,50);//外圆画刷颜色,最后的参数代表透明度( 0(完全透明)-100(不透明) ) QPainterPath path; path.moveTo(insideR,0); path.lineTo(outsideR,0); path.arcTo(0-outsideR,0-outsideR,outsideR*2,outsideR*2,0,180); path.lineTo(0-insideR,0); path.arcTo(0-insideR,0-insideR,insideR*2,insideR*2,0,180); path.moveTo(0-insideR,0); path.lineTo(0-outsideR,0); path.arcTo(0-outsideR,0-outsideR,outsideR*2,outsideR*2,180,180); path.lineTo(insideR,0); path.arcTo(0-insideR,0-insideR,insideR*2,insideR*2,180,180); painter->setPen(Qt::NoPen); painter->setBrush(outsideBrushColor); painter->drawPath(path); painter->setBrush(Qt::NoBrush); painter->setPen(outSideColor); painter->drawEllipse( QPointF(0,0),outsideR,outsideR ); painter->setBrush(insideBrushColor); painter->setPen(insideColor); painter->drawEllipse( QPointF(0,0),insideR,insideR ); painter->setPen(lineColor); QPoint p1(0, 0- outsideR - 10 ); QPoint p2(0, outsideR + 10 ); painter->drawLine(p1,p2); painter->rotate(90); painter->drawLine(p1,p2); painter->rotate(-90); delete painter; }