参考文章:https://blog.csdn.net/yuxing55555/article/details/79752978
效果图:
void WareArea::paintEvent(QPaintEvent *event)
{
int height = this->height();
static QList<QPointF> points = QList<QPointF>() << QPointF(0, 0) << QPointF(100, 200) << QPointF(200, 100)
<< QPointF(300, 330) << QPointF(330, 400) << QPointF(350, 500);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
//painter.setPen(QPen(Qt::black, 2));
painter.setPen(Qt::NoPen);
painter.setBrush(QBrush(Qt::blue, Qt::SolidPattern));
QPainterPath path(points[0]);
for (int i = 0; i < points.size() - 1; ++i)
{
// 贝赛尔曲线
// 控制点的 x 坐标为 sp 与 ep 的 x 坐标和的一半
// 第一个控制点 c1 的 y 坐标为起始点 sp 的 y 坐标
// 第二个控制点 c2 的 y 坐标为结束点 ep 的 y 坐标
QPointF sp = points[i];
QPointF ep = points[i+1];
QPointF c1 = QPointF((sp.x() + ep.x()) / 2, sp.y());
QPointF c2 = QPointF((sp.x() + ep.x()) / 2, ep.y());
path.moveTo(points[i].x(), height);
path.lineTo(points[i]);
path.cubicTo(c1, c2, ep);
path.lineTo(points[i+1].x(), height);
path.lineTo(points[i].x(), height);
}
painter.drawPath(path);
}