本节对应的视频讲解:B_站_视_频
https://www.bilibili.com/video/BV1ZP4y1S7Ax
本节讲解如何绘制多段线、多边形
1. 相关的 API
直接查看官方的帮助文档,可以看到有多个重载的方法用于绘制多段线、多边形
1.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)
1.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);
2. 具体实现
仍然使用上一节绘制点、线的那个数组
只需在 PaintWidget.cpp
的 paintEvent
中添加如下代码即可:
void PaintWidget::paintEvent(QPaintEvent *event)
{
...
for ( int x = 0; x < width(); x += 100 ) {
for ( int y = 0; y < height(); y += 100 ) {
...
switch ( mShape ) {
// 多线段、多边形
case _Polyline:
painter.drawPolyline(points, 4);
break;
case _Polygon:
painter.drawPolygon(points, 4);
break;
}
...
}
}
}
最终绘制的多段线、多边形效果,如下: