Qt 5.5绘制填充饼图

Qt 5.5 draw filled pie

下图是灰饼,我想用Qt 5.5画这个

X从左到右递增 Y从上到下递增

我有一个起始角和一个结束角,代表弧的顶部和底部,我正在使用以下方法计算弧角:

double dblArcAngle = fmod(mcfltElevMaxLimit - mcfltElevMinLimit + 180.0, 360.0) - 180.0;

其中:

mcfltElevMaxLimit is 60 and mcfltElevMinLimit is -10

对 drawPie 的调用如下所示:

objOffscrPainter.drawPie(QRect(rctGeom.left() + mcintElevLeftMargin
                               ,rctGeom.top() + mcintElevBottomMargin
                               ,rctGeom.width() - mcintElevLeftMargin
                               ,rctGeom.height() - mcintElevBottomMargin)
                               ,mcfltElevMaxLimit * 16, dblArcAngle * 16);

我得到的是一条非常小的多段线,大约在饼图的中间位置。

(edit),刚刚在文档中读到 startAngle 和 spanAngle 参数 2 和 3 都应该乘以 16,这确实会产生一个饼图,但方向不正确,也没有填充到中心,而是它的进度。

(编辑 2),更多进展,下图现在显示了我得到的结果,我传递的矩形是外部矩形并包括轴,但由于某种原因,饼图偏移了? ?

我想要完成的是将馅饼塞进左下角并与白轴对齐并填充图像。

看起来传递的矩形用于确定饼图的中心点。如果这是正确的,则必须将矩形的中心调整为原点(左下角),并调整大小以填充显示。

QPainter::drawPie 的第一个参数中的矩形是包含圆弧的圆的边界框。因此,要绘制您需要的内容,请尝试这样的操作:

objOffscrPainter.drawPie(QRect(center.x() - r, center.y() - r, 2 * r, 2 * r)
    ,16*mcfltElevMaxLimit, 16*dblArcAngle);

(其中 center 是圆弧的中心)

看来你的情况下 center 是一个 QPoint(0, 0),所以你可以使用这个代码:

objOffscrPainter.drawPie(-r, -r, 2*r, 2*r, 16*mcfltElevMaxLimit, 16*dblArcAngle);

(我们也可以在没有 QRect 的情况下调用它,参见 documentation