前言
继续看源码。
正文
剩下的大部分都是画各种图形的函数,它们一般都有多个重载版本,我就不一 一介绍使用了,只挑其中的一部分使用一下。
在 QPainter
类中,这些方法涉及到绘图的各种功能,主要用于设置视图变换、绘制不同类型的图形(如路径、点、线、矩形)等。下面是这些方法的详细解释:
1. 视图变换设置
-
QRect window() const;
- 返回当前的窗口矩形(绘图区域的逻辑坐标系)。
-
void setWindow(const QRect &window);
- 设置窗口矩形,定义绘图的逻辑坐标系范围。
-
inline void setWindow(int x, int y, int w, int h);
- 以整数参数设置窗口矩形。
-
QRect viewport() const;
- 返回当前的视口矩形(绘图区域的实际坐标系范围)。
-
void setViewport(const QRect &viewport);
- 设置视口矩形,定义绘图的实际显示区域。
-
inline void setViewport(int x, int y, int w, int h);
- 以整数参数设置视口矩形。
-
void setViewTransformEnabled(bool enable);
- 启用或禁用视图变换。启用后,绘图时会应用视图变换。
-
bool viewTransformEnabled() const;
- 返回视图变换是否启用。
关于上述这些函数是用于设置窗口与物理坐标系的,我有篇博客有讲坐标系Qt坐标系统之三个坐标系和两个变换
2. 绘制路径
-
void strokePath(const QPainterPath &path, const QPen &pen);
- 使用
QPen
描边QPainterPath
对象。
- 使用
-
void fillPath(const QPainterPath &path, const QBrush &brush);
- 使用
QBrush
填充QPainterPath
对象。
- 使用
-
void drawPath(const QPainterPath &path);
- 绘制
QPainterPath
对象,不进行填充或描边。
- 绘制
例子
void PaintWidget::paintEvent(QPaintEvent* event)
{Q_UNUSED(event);QPainter painter(this);//设置抗锯齿painter.setRenderHint(QPainter::Antialiasing,true);// 1. 创建 QPainterPath 对象QPainterPath path;// 添加一个矩形到路径中path.addRect(50, 50, 200, 100);// 添加一个椭圆到路径中path.addEllipse(100, 75, 100, 50);// 2. 创建 QPen 对象用于描边,蓝色描边,宽度为 3QPen pen(Qt::blue, 3);// 使用 QPen 描边路径painter.strokePath(path, pen);// 3. 创建 QBrush 对象用于填充,黄色填充QBrush brush(Qt::yellow);// 使用 QBrush 填充路径painter.fillPath(path, brush);// 4. 绘制路径(不进行填充或描边)// 绘制路径的颜色和样式取决于当前设置的 QPainter 状态,设置描边颜色为绿色painter.setPen(Qt::green);// 仅绘制路径painter.drawPath(path);}
3. 绘制点
-
inline void drawPoint(const QPointF &pt);
- 绘制一个点,参数是
QPointF
(浮点坐标)。
- 绘制一个点,参数是
-
inline void drawPoint(const QPoint &p);
- 绘制一个点,参数是
QPoint
(整数坐标)。
- 绘制一个点,参数是
-
inline void drawPoint(int x, int y);
- 绘制一个点,参数是整数坐标
(x, y)
。
- 绘制一个点,参数是整数坐标
-
void drawPoints(const QPointF *points, int pointCount);
- 绘制一组点,参数是
QPointF
数组和点的数量。
- 绘制一组点,参数是
-
inline void drawPoints(const QPolygonF &points);
- 绘制多边形的点,参数是
QPolygonF
对象。
- 绘制多边形的点,参数是
-
void drawPoints(const QPoint *points, int pointCount);
- 绘制一组点,参数是
QPoint
数组和点的数量。
- 绘制一组点,参数是
-
inline void drawPoints(const QPolygon &points);
- 绘制多边形的点,参数是
QPolygon
对象。
- 绘制多边形的点,参数是
例子
void PaintWidget::paintEvent(QPaintEvent* event)
{Q_UNUSED(event);QPainter painter(this);//设置抗锯齿painter.setRenderHint(QPainter::Antialiasing,true);//设置粗一点QPen pen;pen.setWidth(10);// 创建点的数组QPoint points[] = {QPoint(50, 50),QPoint(100, 100),QPoint(150, 150),QPoint(200, 200),QPoint(250, 250)};int pointCount = sizeof(points) / sizeof(points[0]);// 设置画笔颜色pen.setColor(Qt::red);painter.setPen(pen);// 绘制点painter.drawPoints(points, pointCount);// 创建一个 QPolygon 对象,包含一组点QPolygon polygon;polygon << QPoint(30, 30)<< QPoint(80, 80)<< QPoint(130, 130)<< QPoint(180, 180)<< QPoint(230, 230);// 设置画笔颜色pen.setColor(Qt::green);painter.setPen(pen);// 绘制点painter.drawPoints(polygon);}
4. 绘制线
-
inline void drawLine(const QLineF &line);
- 绘制一条线段,参数是
QLineF
(浮点坐标)。
- 绘制一条线段,参数是
-
inline void drawLine(const QLine &line);
- 绘制一条线段,参数是
QLine
(整数坐标)。
- 绘制一条线段,参数是
-
inline void drawLine(int x1, int y1, int x2, int y2);
- 绘制一条线段,参数是起点
(x1, y1)
和终点(x2, y2)
的整数坐标。
- 绘制一条线段,参数是起点
-
inline void drawLine(const QPoint &p1, const QPoint &p2);
- 绘制一条线段,参数是起点和终点的
QPoint
对象。
- 绘制一条线段,参数是起点和终点的
-
inline void drawLine(const QPointF &p1, const QPointF &p2);
- 绘制一条线段,参数是起点和终点的
QPointF
对象。
- 绘制一条线段,参数是起点和终点的
-
void drawLines(const QLineF *lines, int lineCount);
- 绘制一组线段,参数是
QLineF
数组和线段的数量。
- 绘制一组线段,参数是
-
inline void drawLines(const QVector<QLineF> &lines);
- 绘制一组线段,参数是
QVector<QLineF>
对象。
- 绘制一组线段,参数是
-
void drawLines(const QPointF *pointPairs, int lineCount);
- 绘制一组线段,参数是
QPointF
数组中的点对和线段的数量。
- 绘制一组线段,参数是
-
inline void drawLines(const QVector<QPointF> &pointPairs);
- 绘制一组线段,参数是
QVector<QPointF>
对象中的点对。
- 绘制一组线段,参数是
-
void drawLines(const QLine *lines, int lineCount);
- 绘制一组线段,参数是
QLine
数组和线段的数量。
- 绘制一组线段,参数是
-
inline void drawLines(const QVector<QLine> &lines);
- 绘制一组线段,参数是
QVector<QLine>
对象。
- 绘制一组线段,参数是
-
void drawLines(const QPoint *pointPairs, int lineCount);
- 绘制一组线段,参数是
QPoint
数组中的点对和线段的数量。
- 绘制一组线段,参数是
-
inline void drawLines(const QVector<QPoint> &pointPairs);
- 绘制一组线段,参数是
QVector<QPoint>
对象中的点对。
- 绘制一组线段,参数是
例子
void PaintWidget::paintEvent(QPaintEvent* event)
{Q_UNUSED(event);QPainter painter(this);//设置抗锯齿painter.setRenderHint(QPainter::Antialiasing,true);//设置粗一点QPen pen;pen.setWidth(5);// 1. 使用 QLine 数组绘制线段QLine linesArray[] = {QLine(10, 10, 100, 10),QLine(10, 20, 100, 20),QLine(10, 30, 100, 30)};int lineCountArray = sizeof(linesArray) / sizeof(linesArray[0]);pen.setColor(Qt::red);painter.setPen(pen);painter.drawLines(linesArray, lineCountArray);// 2. 使用 QVector<QLine> 对象绘制线段QVector<QLine> linesVector;linesVector << QLine(10, 50, 100, 50)<< QLine(10, 60, 100, 60)<< QLine(10, 70, 100, 70);pen.setColor(Qt::green);painter.setPen(pen);painter.drawLines(linesVector);// 3. 使用 QPoint 数组绘制线段(点对)QPoint pointsArray[] = {QPoint(10, 90), QPoint(100, 90),QPoint(10, 100), QPoint(100, 100),QPoint(10, 110), QPoint(100, 110)};int pointCountArray = sizeof(pointsArray) / sizeof(pointsArray[0]) / 2;pen.setColor(Qt::blue);painter.setPen(pen);painter.drawLines(pointsArray, pointCountArray);// 4. 使用 QVector<QPoint> 对象绘制线段(点对)QVector<QPoint> pointsVector;pointsVector << QPoint(10, 130) << QPoint(100, 130)<< QPoint(10, 140) << QPoint(100, 140)<< QPoint(10, 150) << QPoint(100, 150);pen.setColor(Qt::gray);painter.setPen(pen);painter.drawLines(pointsVector);}
5. 绘制矩形
-
inline void drawRect(const QRectF &rect);
- 绘制一个矩形,参数是
QRectF
(浮点坐标)。
- 绘制一个矩形,参数是
-
inline void drawRect(int x1, int y1, int w, int h);
- 绘制一个矩形,参数是整数坐标
(x1, y1)
和宽高(w, h)
。
- 绘制一个矩形,参数是整数坐标
-
inline void drawRect(const QRect &rect);
- 绘制一个矩形,参数是
QRect
(整数坐标)。
- 绘制一个矩形,参数是
绘制矩形本篇就不说了,留到下一个序列一起说。