Qt 編程點滴 初學(xué)者必看 (7)
作者:佚名
本文介紹的是Qt 編程點滴,作為一名新手,我建議必須看一看。編程那些事,只有編程人員自己明白!所以推薦本文。
Qt 編程繼續(xù)為大家講解,還是接著文章 Qt 編程點滴 初學(xué)者必看 (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)容,請看編輯推薦。
責(zé)任編輯:zhaolei
來源:
互聯(lián)網(wǎng)