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)
下图是灰饼,我想用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)