QT绘制圆弧遇到缺失问题

QT绘制圆弧遇到缺失问题_第1张图片
这两天在写QT的时候,我想利用两个圆相减的方式来绘制一个圆弧,主要代码如下
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));

下面我们再看看效果

QT绘制圆弧遇到缺失问题_第2张图片

事实上到底是什么原因导致这个问题我并不知道,这个问题太诡异了。

项目的其他部分源码如有需要,可留言

你可能感兴趣的:(QT)