前言
继续看源码。
正文
剩下的大部分都是画各种图形的函数,它们一般都有多个重载版本,我就不一 一介绍使用了,只挑其中的一部分使用一下。
在 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 对象用于描边,蓝色描边,宽度为 3
QPen 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
(整数坐标)。
- 绘制一个矩形,参数是
绘制矩形本篇就不说了,留到下一个序列一起说。