Qt 5.5画满馅饼

时间:2016-03-21 12:12:34

标签: c++ qt qpainter

下面的图片显示了灰色的馅饼,我想用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);

我得到的是一条非常小的折线,位于馅饼的中间位置。

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

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

enter image description here

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

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

1 个答案:

答案 0 :(得分:1)

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