Qt 編程點滴 初學者必看 (7)
作者:佚名 
  本文介紹的是Qt 編程點滴,作為一名新手,我建議必須看一看。編程那些事,只有編程人員自己明白!所以推薦本文。
 Qt 編程繼續(xù)為大家講解,還是接著文章 Qt 編程點滴 初學者必看 (6) ,繼續(xù)介紹,說編程那些細節(jié)。由于本話題是一節(jié)一節(jié)為大家介紹的,所以更多內(nèi)容請看末尾編輯推薦。本文基本是用代碼實現(xiàn)的效果,所以并沒有太多的內(nèi)容。
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); //內(nèi)圓線條顏色
 - QColor outSideColor(237,29,12); //外圓線條顏色
 - QColor lineColor(237,29,12); //直線顏色
 - QColor insideBrushColor(255,0,0,25);//內(nèi)圓畫刷顏色,最后的參數(shù)代表透明度( 0(完全透明)-100(不透明) )
 - QColor outsideBrushColor(255,0,0,50);//外圓畫刷顏色,最后的參數(shù)代表透明度( 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); //內(nèi)圓線條顏色
 - QColor outSideColor(237,29,12); //外圓線條顏色
 - QColor lineColor(237,29,12); //直線顏色
 - QColor insideBrushColor(255,0,0,25);//內(nèi)圓畫刷顏色,最后的參數(shù)代表透明度( 0(完全透明)-100(不透明) )
 - QColor outsideBrushColor(255,0,0,50);//外圓畫刷顏色,最后的參數(shù)代表透明度( 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;
 - }
 
小結(jié):本文主要介紹了在Qt 窗體的使用,通過Qt 編程點滴介紹,也給自己提高了編程過程中需要注意的細節(jié)問題,由于本話題是一節(jié)一節(jié)為大家展現(xiàn)的,所以更多內(nèi)容,請看編輯推薦。
責任編輯:zhaolei 
                    來源:
                    互聯(lián)網(wǎng)
 














 
 
 
 
 
 
 