文章目錄
- 頭文件和構造函數
- 啟用反鋸齒功能
- 繪制矩形
- 繪制圓角矩形
- 繪制橢圓
- 繪制圓弧
- 繪制弦
- 繪制凸多邊形
- 繪制圖片
- 繪制直線
- 繪制多條直線
- 繪制多點連接的線
- 繪制路徑
- 繪制扇形
- 繪制點
- 繪制文本
- 擦除矩形區域
- 填充矩形
- 填充路徑
頭文件和構造函數
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}
啟用反鋸齒功能
首先,我們在每個圖形的繪制過程中啟用反鋸齒功能,以保證繪制效果的平滑。
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);// 以下為具體圖形的繪制代碼
}
繪制矩形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);// 畫筆樣式pen.setCapStyle(Qt::FlatCap); // 線端點樣式pen.setJoinStyle(Qt::BevelJoin); // 線連接點樣式// 給畫家設置畫筆painter.setPen(pen);// 設置畫刷QBrush brush;brush.setColor(Qt::yellow);brush.setStyle(Qt::SolidPattern);// 給畫家設置畫刷painter.setBrush(brush);// 繪制矩形QRect rect(60, 60, 400, 400);painter.drawRect(rect);
}
解釋:
QPen
用于設置畫筆的寬度、顏色、線端點樣式和連接點樣式。QBrush
用于設置填充顏色和樣式。QRect
定義了矩形的尺寸和位置。painter.drawRect(rect)
使用指定的畫筆和畫刷繪制矩形。
繪制圓角矩形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 設置畫刷QBrush brush;brush.setColor(Qt::yellow);brush.setStyle(Qt::SolidPattern);painter.setBrush(brush);// 繪制圓角矩形QRect roundedRect(20, 20, 400, 300);painter.drawRoundedRect(roundedRect, 20, 20);
}
解釋:
painter.drawRoundedRect
繪制帶圓角的矩形。20, 20
指定了圓角的水平和垂直半徑。
繪制橢圓
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 設置畫刷QBrush brush;brush.setColor(Qt::yellow);brush.setStyle(Qt::SolidPattern);painter.setBrush(brush);// 繪制橢圓QRect ellipseRect(20, 20, 400, 300);painter.drawEllipse(ellipseRect);
}
解釋:
painter.drawEllipse
使用指定的矩形邊界繪制橢圓。
繪制圓弧
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制圓弧QRect arcRect(20, 20, 400, 400);// 起始角和伸縮角必須以1/16度指定,即一個完整的圓等于5760(16 * 360)。// 角度的正值表示逆時針方向,負值表示順時針方向// 零度在3點鐘方向(參考手表的位置)painter.drawArc(arcRect, 0 * 16, 90 * 16);
}
解釋:
painter.drawArc
繪制圓弧。0 * 16
和90 * 16
分別表示起始角度和跨越角度,單位為1/16度。
繪制弦
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制弦QRect chordRect(20, 20, 400, 400);painter.drawChord(chordRect, 0 * 16, 120 * 16);
}
解釋:
painter.drawChord
繪制弦,弦是一個連接圓弧兩個端點的線段。
繪制凸多邊形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制凸多邊形QPoint convexPoints[4] = {{50, 100},{100, 50},{500, 160},{110, 400}};painter.drawConvexPolygon(convexPoints, 4);
}
解釋:
painter.drawConvexPolygon
繪制凸多邊形。QPoint
數組定義了多邊形的頂點。
繪制圖片
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 繪制圖片QRect imageRect(10, 10, 400, 300);QImage image(":/JINGMAO.jpg");painter.drawImage(imageRect, image);
}
解釋:
painter.drawImage
在指定的矩形區域內繪制圖片。
繪制直線
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制直線QLine line(50, 50, 400, 400);painter.drawLine(line);
}
解釋:
QLine
定義了直線的起點和終點。painter.drawLine
繪制直線。
繪制多條直線
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制多條直線QRect rect(50, 50, 400, 300);QVector<QLine> lines;lines.append(QLine(rect.topLeft(), rect.topRight()));lines.append(QLine(rect.bottomLeft(), rect.topRight()));lines.append(QLine(rect.topLeft(), rect.bottomRight()));painter.drawLines(lines);
}
解釋:
QVector<QLine>
用于存儲多條直線。painter.drawLines
繪制多條直線。
繪制多點連接的線
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制多點連接的線QPoint points[5] = {{50, 100},{100, 50},{500, 160},{200, 200},{110, 400}};painter.drawPolyline(points, 5);
}
解釋:
QPoint
數組定義了
多點連接的線的頂點。
painter.drawPolyline
繪制多點連接的線。
繪制路徑
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制路徑QRect rect(50, 50, 400, 300);QPainterPath path;path.addEllipse(rect);path.addRect(rect);painter.drawPath(path);
}
解釋:
QPainterPath
用于定義復雜的路徑。painter.drawPath
繪制由QPainterPath
對象定義的路徑。
繪制扇形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制扇形QRect rect(50, 50, 400, 300);painter.drawPie(rect, 0 * 16, 120 * 16); // 0 度是 3 點鐘方向
}
解釋:
painter.drawPie
繪制扇形。
繪制點
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 繪制單個點painter.drawPoint(QPoint(100, 200));// 繪制多個點QPoint points[4] = {{50, 100},{100, 50},{500, 160},{110, 400}};painter.drawPoints(points, 4);
}
解釋:
painter.drawPoint
繪制單個點。painter.drawPoints
繪制多個點。
繪制文本
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 設置字體QFont font;font.setFamily("微軟雅黑");font.setPointSize(30);font.setBold(true);painter.setFont(font);// 繪制文本QRect rect(100, 100, 400, 200);painter.drawText(rect, "劉琴小寶貝");
}
解釋:
QFont
設置字體屬性。painter.drawText
在指定的矩形區域內繪制文本。
擦除矩形區域
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 繪制圖片QRect rect(10, 10, 400, 300);QImage image(":/JINGMAO.jpg");painter.drawImage(rect, image);// 設置窗口背景色setPalette(QPalette(Qt::red));// 擦除矩形區域QRect rect2(100, 100, 200, 100);painter.eraseRect(rect2);
}
解釋:
painter.eraseRect
擦除指定的矩形區域內容。
填充矩形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 填充矩形QRect rect(10, 10, 400, 300);painter.fillRect(rect, Qt::blue);
}
解釋:
painter.fillRect
使用指定的顏色填充矩形區域。
填充路徑
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 設置畫筆QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 定義路徑并填充QRect rect(10, 10, 400, 300);QPainterPath path;path.addRect(rect);path.addEllipse(rect);painter.fillPath(path, Qt::blue);
}
解釋:
QPainterPath
用于定義復雜的路徑。painter.fillPath
使用指定的顏色填充路徑。
通過以上這些代碼示例和詳細解釋,相信你已經掌握了在Qt中進行各種圖形繪制的方法。Qt的繪圖功能非常強大,能夠滿足各種復雜的繪圖需求。