1. 点、线
1.1 点
// 带 F 表示参数为浮点数,否则为整型数
void drawPoint(const QPointF &position)
void drawPoint(const QPoint &position)
void drawPoint(int x, int y)
void drawPoints(const QPointF *points, int pointCount)
void drawPoints(const QPolygon &points)
void drawPoints(const QPolygonF &points)
void drawPoints(const QPoint *points, int pointCount)
1.2 线
// 带 F 表示参数为浮点数,否则为整型数
void drawLine(const QLineF &line)
void drawLine(const QLine &line)
void drawLine(const QPoint &p1, const QPoint &p2)
void drawLine(const QPointF &p1, const QPointF &p2)
void drawLine(int x1, int y1, int x2, int y2)
void drawLines(const QLineF *lines, int lineCount)
void drawLines(const QList<QLine> &lines)
void drawLines(const QList<QLineF> &lines)
void drawLines(const QList<QPoint> &pointPairs)
void drawLines(const QList<QPointF> &pointPairs)
void drawLines(const QLine *lines, int lineCount)
void drawLines(const QPoint *pointPairs, int lineCount)
void drawLines(const QPointF *pointPairs, int lineCount)
2. 多段线、多边形
2.1 多段线
将多个点连接形成多段线
比如,数组中有 ABCD 四个点,会将A和B连接,B和C连接,C和D连接,形成一个多段线
// 带 F 表示参数为浮点数,否则为整型数
void drawPolyline(const QPointF *points, int pointCount) // 参1:点的数组,参2:点的个数
void drawPolyline(const QPolygonF &points) // 参数:多边形
void drawPolyline(const QPoint *points, int pointCount)
void drawPolyline(const QPolygon &points)
2.2 多边形
类似于绘制多段线的参数,但是会形成一个封闭的图形
比如,数组中有 ABCD 四个点,会将A和B连接,B和C连接,C和D连接,最后再将D和A连接,形成一个多边形
// 带 F 表示参数为浮点数,否则为整型数
void drawPolygon(const QPointF *points,
int pointCount,
Qt::FillRule fillRule = Qt::OddEvenFill);
void drawPolygon(const QPolygonF &points,
Qt::FillRule fillRule = Qt::OddEvenFill);
void drawPolygon(const QPoint *points,
int pointCount,
Qt::FillRule fillRule = Qt::OddEvenFill);
void drawPolygon(const QPolygon &points,
Qt::FillRule fillRule = Qt::OddEvenFill);
3. 矩形、圆角矩形
3.1 矩形
// 带 F 表示参数为浮点数,否则为整型数
void drawRect(const QRectF &rectangle)
void drawRect(const QRect &rectangle)
// 指定左上角的顶点,以及宽高
void drawRect(int x, int y, int width, int height)
3.2 圆角矩形
// 带 F 表示参数为浮点数,否则为整型数
// 最后一个参数 Qt::SizeMode 是一个枚举类型,取值为:
// Qt::AbsoluteSize: 则 xRadius 和 yRadius 为圆角大小
// Qt::RelativeSize:则 xRadius 和 yRadius 为圆角百分比
void drawRoundedRect(const QRectF &rect,
qreal xRadius,
qreal yRadius,
Qt::SizeMode mode = Qt::AbsoluteSize)
void drawRoundedRect(const QRect &rect,
qreal xRadius,
qreal yRadius,
Qt::SizeMode mode = Qt::AbsoluteSize)
void drawRoundedRect(int x, int y, int w, int h,
qreal xRadius,
qreal yRadius,
Qt::SizeMode mode = Qt::AbsoluteSize)
4. 圆、椭圆
当指定的矩形为正方形,或者rx与ry相等时,绘制的就是圆
// 直接制定一个矩形
void drawEllipse(const QRectF &rectangle);
void drawEllipse(const QRect &rectangle);
// 通过左上角的顶点和宽高,来指定一个矩形
void drawEllipse(int x, int y, int width, int height);
// 通过指定中心 和 rx、ry
void drawEllipse(const QPointF ¢er, qreal rx, qreal ry);
void drawEllipse(const QPoint ¢er, int rx, int ry);
5. 圆弧、饼图、弦图
5.1 圆弧
绘制圆弧时,需要指定一个矩形,以及开始角度startAngel、跨度角度spanAngle
角度的起始零点为时钟三点钟位置,逆时针增加。一圈的跨度为360x16,半圈为180x16
// 直接指定一个矩形对象
void drawArc(const QRectF &rectangle, int startAngle, int spanAngle);
void drawArc(const QRect &rectangle, int startAngle, int spanAngle);
// 通过指定左上角的顶点和宽高来指定一个矩形
void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle);
5.2 饼图
绘制饼图时,和绘制圆弧类似,也需要指定一个矩形,以及开始角度startAngel、跨度角度spanAngle
// 直接指定一个矩形对象
void drawPie(const QRectF &rectangle, int startAngle, int spanAngle);
void drawPie(const QRect &rectangle, int startAngle, int spanAngle);
// 通过指定左上角的顶点和宽高来指定一个矩形
void drawPie(int x, int y, int width, int height, int startAngle, int spanAngle);
5.3 弦图
绘制饼图时,和绘制圆弧类似,也需要指定一个矩形,以及开始角度startAngel、跨度角度spanAngle
// 直接指定一个矩形对象
void drawChord(const QRectF &rectangle, int startAngle, int spanAngle);
void drawChord(const QRect &rectangle, int startAngle, int spanAngle);
// 通过指定左上角的顶点和宽高来指定一个矩形
void drawChord(int x, int y, int width, int height, int startAngle, int spanAngle);
6. 路径/贝瑟尔曲线
// 直接指定一个 QPainterPath 对象
void drawPath(const QPainterPath &path)
drawPath()需要一个QPainterPath 对象,其常用方法
// 移动到指定的点,开始指定路径
void moveTo(const QPointF &point);
void moveTo(qreal x, qreal y);
// 以直线的方式,路径到指定的点
void lineTo(const QPointF &endPoint);
void lineTo(qreal x, qreal y);
// 以贝瑟尔曲线的方式,路径到指定的点
// 具体来说:使用控制点c1和c2,在当前点和结束点之间,绘制一条贝瑟尔曲线
void cubicTo(const QPointF &c1, const QPointF &c2, const QPointF &endPoint);
void cubicTo(qreal c1X, qreal c1Y, qreal c2X, qreal c2Y, qreal endPointX, qreal endPointY);
贝瑟尔曲线,常用于速度、动画等的控制,这不是我们的重点
关于贝瑟尔曲线的动态演示,可以查看这里:http://yisibl.github.io/cubic-bezier
7. 文本、图片
7.1 文本
// 通过指定矩形,来绘制文本
void drawText(const QRectF &rectangle,
int flags,
const QString &text,
QRectF *boundingRect = nullptr);
void drawText(int x,
int y,
const QString &text);
void drawText(const QRect &rectangle,
int flags,
const QString &text,
QRect *boundingRect = nullptr);
void drawText(int x,
int y,
int width,
int height,
int flags,
const QString &text,
QRect *boundingRect = nullptr);
void drawText(const QRectF &rectangle,
const QString &text,
const QTextOption &option = QTextOption());
// 通过指定点,来绘制文本
void drawText(const QPointF &position, const QString &text);
void drawText(const QPoint &position, const QString &text);
7.2 图片
带有 source 参数的方法:将 pixmap 的 source 指定的矩形区域的部分,绘制到 target 指定的矩形区域上
// 通过指定矩形,来绘制图片
void drawPixmap(const QRectF &target,
const QPixmap &pixmap,
const QRectF &source);
void drawPixmap(const QRect &target,
const QPixmap &pixmap,
const QRect &source);
void drawPixmap(int x,
int y,
int w,
int h,
const QPixmap &pixmap,
int sx,
int sy,
int sw,
int sh);
void drawPixmap(const QRect &rectangle,
const QPixmap &pixmap);
void drawPixmap(int x,
int y,
int width,
int height,
const QPixmap &pixmap);
// 通过指定点,来绘制图片
void drawPixmap(const QPointF &point,
const QPixmap &pixmap,
const QRectF &source);
void drawPixmap(const QPoint &point,
const QPixmap &pixmap,
const QRect &source);
void drawPixmap(const QPointF &point,
const QPixmap &pixmap);
void drawPixmap(const QPoint &point,
const QPixmap &pixmap);
void drawPixmap(int x,
int y,
const QPixmap &pixmap);
void drawPixmap(int x,
int y,
const QPixmap &pixmap,
int sx,
int sy,
int sw,
int sh);





