效果
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNiZpdmL1kDOxADM1YTM0ETNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
1 繪制點
QPainter painter(this);
painter.setPen(QPen(QColor(255,255,255),2)); //後面參數2為點的大小
QPoint dotPos = QPoint(100,100);
painter.drawPoint(dotPos);
2 繪制直線
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing); //抗鋸齒,繪制出來看起來不會有樓梯形狀的鋸齒感
painter.setPen(QPen(QColor(255,255,255),2)); //後面參數2為線條的粗細
painter.drawLine(QPoint(0,0),QPoint(100,100));
3 繪制矩形
4 繪制圓角矩形
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
painter.drawRoundedRect(rectangle, 20.0, 15.0);
5 繪制圓
6 繪制文字
QPainter painter(this);
QRectF rect(0, 0, 100, 50); //文字顯示區域
painter.drawText(rect, Qt::AlignHCenter, QString::number(1234));//字型居中
7 繪制多邊形
QPointF points[4];
points[0] = m_drawArea.topRight();
points[1] = m_drawArea.topLeft();
points[2] = m_drawArea.bottomRight();
points[3] = m_drawArea.bottomLeft();
painter.drawPolygon(points, angleMapLen.size()); //繪制多邊形
8 繪制扇型
函數原型:
void QPainter::drawPie(const QRect &, int a, int alen)
參數1: 圓弧的圓心所處于矩形 (扇型圓心為矩形中心)
參數2: 圓弧的開始始的角度°(機關1/16度)
參數3: 圓弧的 轉動 的角度°(機關1/16度)
9 形狀填充
對于繪制閉合的圖像,可以設定填充,如圓、多邊形等,代碼如下:
QBrush brush(QColor(0, 0, 255, 50), Qt::Dense1Pattern); //後面參數為填充樣式
painter.setBrush(brush); //使用畫刷
怎麼使用?以圓為例子,把上面代碼加在繪制之前就行了,如下:
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing); //抗鋸齒
painter.setPen(QPen(QColor(255,255,255),2)); //後面參數2為線條的粗細
QBrush brush(QColor(0, 0, 255, 50), Qt::Dense1Pattern); //後面參數為填充樣式
painter.setBrush(brush); //使用畫刷
painter.drawEllipse(QPoint(100,100),100,100);
對于填充,可以選擇多種填充樣式
填充樣式格式如下:
10 繪制圖檔
QPainter painter(this);
QRect rect(0,0,200,200);
painter.drawImage(rect,*mImage);
11 繪制圓弧
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;
QPainter painter(this);
painter.drawArc(rectangle, startAngle, spanAngle);
12 繪制弦
QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;
QPainter painter(this);
painter.drawChord(rect, startAngle, spanAngle);
13 繪制路徑
QPainterPath path;
path.moveTo(20, 80);
path.lineTo(20, 30);
path.cubicTo(80, 0, 50, 50, 80, 80);
QPainter painter(this);
painter.drawPath(path);