void draw :: paintEvent(QPaintEvent *event){
//繪製圓弧
int spanAngle = 360 / xL->length;
int startAngle = (i - 1) * spanAngle ;
int radius = 200; //大圓直徑
int radius_Little = 170; //小圓直徑
int circleLeftUp_x = 110; // 大圓矩形左上角x座標
int circleLeftUp_y = 20; //大圓矩形左上角y座標
//三個參數:rect表示弧線所在的矩形,startAngle起始角度,spanAngle跨越角度
QPainterPath arcPath;
arcPath.moveTo(radius / 2.0+circleLeftUp_x, radius / 2.0+circleLeftUp_y);
QRectF rectArc(circleLeftUp_x , circleLeftUp_y,radius, radius); //x,y,w,h,
arcPath.arcTo(rectArc, startAngle, spanAngle);
QPainterPath subPath;
subPath.moveTo(radius / 2.0+circleLeftUp_x, radius / 2.0+circleLeftUp_y);
QRectF rectArcLittle(circleLeftUp_x + (radius - radius_Little) /2.0 ,circleLeftUp_y+ (radius - radius_Little) /2.0 , radius_Little, radius_Little); //x,y,w,h,
subPath.arcTo(rectArcLittle, startAngle, spanAngle);
//subPath.addEllipse(rectArc.adjusted(radius - radius_Little , radius - radius_Little , radius_Little - radius, radius_Little -radius));
//arcPath爲大圓 subPath爲小圓 arcPath -= subPath; arcPath.addText(arcPath.pointAtPercent(0.1), font, QStringLiteral("玩家")+QString::number(p->data, 10));} 重點問題在subPath,也就是小圓的定義上,現在我們把小圓的定義方式換一下,換成下面我註釋掉的那句,也就是從上面的大圓變化而來,並且是橢圓的路徑(說是橢圓,其實還是圓,因爲長軸和短軸長度相等),改動後的代碼如下
QPainterPath subPath;
subPath.moveTo(radius / 2.0+circleLeftUp_x, radius / 2.0+circleLeftUp_y);
//QRectF rectArcLittle(circleLeftUp_x + (radius - radius_Little) /2.0 ,circleLeftUp_y+ (radius - radius_Little) /2.0 , radius_Little, radius_Little); //x,y,w,h,
//subPath.arcTo(rectArcLittle, startAngle, spanAngle);
subPath.addEllipse(rectArc.adjusted(radius - radius_Little , radius - radius_Little , radius_Little - radius, radius_Little -radius));