如下:
实际绘制的是一个QPainterPath
4个圆弧是利用的arcTo方法得到的路径
void QPainterPath::arcTo(const QRectF &rectangle,
qreal startAngle,
qreal sweepLength)
void QPainterPath::arcTo(qreal x,
qreal y,
qreal width,
qreal height,
qreal startAngle, qreal sweepLength)
原理如下:
//根据一个矩形在内部得到一个星星的路径
QPainterPath getStarPath(QRect rect) {
//防止形变,始终取最小值的那条边作为星星的外接正方形
int side = qMin(rect.width(), rect.height());
QPainterPath path;
path.moveTo(rect.center().x() - side / 2, rect.center().y()); //移动到星星最左边的点
path.arcTo(rect.center().x() - side, rect.center().y() - side, side, side, -90, 90); //arcTo到星星最上边的点
path.arcTo(rect.center().x(), rect.center().y() - side, side, side, -180, 90); //arcTo到星星最右边的点
path.arcTo(rect.center().x(), rect.center().y(), side, side, 90, 90); //arcTo到星星最下边的点
path.arcTo(rect.center().x() - side, rect.center().y(), side, side, 0, 90); //arcTo到星星最左边的点
//构成一个星星的路径
return path;
}