C++ Qt 5.5绘制填充饼图

C++ Qt 5.5绘制填充饼图,c++,qt,qpainter,C++,Qt,Qpainter,下图显示了灰色饼图,我想使用Qt5.5绘制此图 X从左向右增加 Y从上到下递增 我有一个起始角和一个结束角,表示弧的顶部和底部,我使用以下公式计算弧角: double dblArcAngle = fmod(mcfltElevMaxLimit - mcfltElevMinLimit + 180.0, 360.0) - 180.0; 其中: mcfltElevMaxLimit is 60 and mcfltElevMinLimit is -10 对drawPie的调用如下所示: objOffsc

下图显示了灰色饼图,我想使用Qt5.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);
objOffscrPainter.drawPie(QRect(center.x() - r, center.y() - r, 2 * r, 2 * r)
    ,16*mcfltElevMaxLimit, 16*dblArcAngle);
我得到的是一条非常小的折线,大概在馅饼应该在的中间

(编辑),只需阅读文档中的startAngle和spanAngle参数2和3都应乘以16,这会生成一个饼图,不是方向正确,也不是填充到中心,而是其进度

(编辑2),更进一步,下面的图像现在显示了我得到的结果,我经过的矩形是外矩形,包括轴,但由于某种原因饼图是偏移的

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


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

qPaint::drawPie的第一个参数中的矩形是包含圆弧的圆的边界框。因此,要绘制所需内容,请尝试以下方法:

objOffscrPainter.drawPie(QRect(rctGeom.left() + mcintElevLeftMargin
                               ,rctGeom.top() + mcintElevBottomMargin
                               ,rctGeom.width() - mcintElevLeftMargin
                               ,rctGeom.height() - mcintElevBottomMargin)
                               ,mcfltElevMaxLimit * 16, dblArcAngle * 16);
objOffscrPainter.drawPie(QRect(center.x() - r, center.y() - r, 2 * r, 2 * r)
    ,16*mcfltElevMaxLimit, 16*dblArcAngle);
(其中,
center
是弧的中心)

在您的情况下,
中心
似乎是一个
QPoint(0,0)
,因此您可以使用此代码:

objOffscrPainter.drawPie(-r, -r, 2*r, 2*r, 16*mcfltElevMaxLimit, 16*dblArcAngle);
(我们也可以称之为无QRect,请参阅)