畫筆
QPen pen;
pen.setWidth(3); // 線條寬度
pen.setColor(Qt::red);// 畫筆顏色
pen.setStyle(Qt::DashLine);// 線條樣式
pen.setCapStyle(Qt::RoundCap);// 線端樣式
pen.setJoinStyle(Qt::BevelJoin);// 連接樣式
painter.setPen(pen);
線條
線端
連接
畫刷
QBrush brush;brush.setColor(Qt::yellow);// 顏色brush.setStyle(Qt::SolidPattern);// 樣式brush.setTexture(QPixmap &pixmap);// 設置畫刷圖片
漸變
QRadialGradient rg(W/2,H/2,qMax(W/8,H/8),W/2,H/2);rg.setColorAt(0,Qt::green);rg.setColorAt(1,Qt::blue);rg.setSpread(QGradient::ReflectSpread);
QLinearGradient
QRadialGradient
QConicalGradient
漸變模式
PadSpread
RepeatSpread
ReflectSpread
畫家
可以畫不同的基本圖形元件
更復雜的圖形用QPainterPath
對畫家的操作
painter.rotate(15);//旋轉
painter.translate(20,20);//平移
painter.scale(0.5,0.5);//坐標縮放
painter.shear(0.5,0.5);//扭轉變換painter.save();
painter.rotate(15);//旋轉
painter.restore();
painter.drawRect(rect);
視口和窗口
物理設備提供最基本的坐標系,
通過各種變換得到邏輯坐標系,
為了更方便的操作,出現了視口坐標系和窗口坐標系,
視口表示繪圖設備的任意一個矩形區域的物理坐標,默認情況下為整個繪圖設備區域。
窗口與視口是同一個矩形,可以重新定義矩形區域的邏輯坐標。
視口設置為painter.setViewport(50,0,200,200)
,即物理設備的(50,0)
為左上角,繪制一個200的正方形,改形狀為視口。但坐標系與物理坐標系一致。
然后使用painter.setViewport(-50,-50,100,100)
這里定義(50,0)
為(-50,-50)
且對長寬做了縮放,這里是縮小了,縮小到(100,100)
,以后的操作都是在100$\times$100的空間進行。
QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);int W = this->width();int H = this->height();qDebug()<<W<<" "<< H;int side = qMin(W,H);QRect rect((W-side)/2,(H-side)/2,side,side);painter.drawRect(rect);painter.setViewport(rect);painter.setWindow(-100,-100,200,200);QPen pen;pen.setWidth(2);pen.setColor(Qt::red);pen.setStyle(Qt::SolidLine);painter.setPen(pen);QLinearGradient linearGrad(0,0,100,0);linearGrad.setColorAt(0,Qt::yellow);linearGrad.setColorAt(1,Qt::green);linearGrad.setSpread(QGradient::PadSpread);painter.setBrush(linearGrad);//painter.setCompositionMode(QPainter::RasterOp_NotSourceXorDestination);painter.setCompositionMode(QPainter::CompositionMode_Difference);for(int i = 0; i < 36; i++){painter.drawEllipse(QPoint(50,0),50,50);painter.rotate(10);}
運行結果