gpt4 book ai didi

c++ - 如何让文本在饼图的每个切片内居中?

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:16 25 4
gpt4 key购买 nike

我想让文本标签(百分比)在每个饼图切片中居中。它目前适用于两个象限:

screenshot

我做错了什么?

void PieChartWidget::paintEvent(QPaintEvent *) {
QPainter painter(this);
QRectF size;
painter.setPen(QPen(Qt::black, 2));

if (this->height() > this->width()) {
size = QRectF(5, 5, this->width() - 10, this->width() - 10);
} else {
size = QRectF(5, 5, this->height() - 5, this->height() - 10);
}

double sum = 0.0, startAng = 0.0;
double angle, endAng;
double percent;

for (int i = 0; i < qvValues.size(); i++) {
sum += qvValues[i];
}
for (int i = 0; i < qvValues.size(); i++) {
percent = qvValues[i] / sum;
angle = percent * 360.0;
endAng = startAng + angle;
painter.setBrush(qvColors[i]);
painter.drawPie(size, static_cast<int>(startAng * 16),
static_cast<int>(angle * 16));
startAng = endAng;
if (percent != 0) {
double draw_x = width() / 2 +
cos(PI * (endAng / 180.0 - angle / 360.0)) * this->width() / 4.0;
double draw_y = height() / 2 +
sin(PI * (endAng / 180.0 - angle / 360.0)) * this->width() / 4.0;
painter.drawText(draw_x, draw_y, QString::number(percent * 100) + "%");
}
}
}

最佳答案

在这一行:

painter.drawText(this->width()/4,this->height(), QString::number(percent*100)+"%");

你似乎每次都在同一个地方画百分比。你确实成功地绘制了每个部分的百分比,它们只是每次都被绘制在同一个地方。尝试将其更改为:

painter.drawText(double(i + 1) * this->width()/4,this->height(), QString::number(percent*100)+"%");

你会明白我的意思。通过将 x 值乘以某个变化的值,每个绘制文本的 x 位置将发生变化,因此您将能够看到绘制的不同百分比。

如果您希望它在每个象限中绘制,那么您的代码可能如下所示:

# define PI           3.14159265358979323846

...

double draw_x = this->width / 2.0 + cos(PI * (end_angle / 180.0 - angle / 360.0)) * this->width / 4.0;
double draw_y = this->height / 2.0 - sin(PI * (end_angle / 180.0 - angle / 360.0)) * this->width / 4.0;
painter.drawText(draw_x, draw_y, QString::number(percent*100)+"%");

基本上,上面代码中发生的事情是计算每个切片中间的 x 和 y 坐标。然后,我正在绘制这些位置的百分比。

关于c++ - 如何让文本在饼图的每个切片内居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51385190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com