qt用QPixmap/QImage画一个饼状图
时间: 2024-05-03 17:17:48 浏览: 146
研究QPixmap或QImage的坐标-QT界面设计
以下是一个简单的例子,演示如何使用QPixmap和QPainter来绘制一个饼状图:
```cpp
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建一个QPixmap对象,并设置其大小为400x400
QPixmap pixmap(400, 400);
pixmap.fill(Qt::white);
// 创建一个QPainter对象,用于绘制饼状图
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing); // 开启抗锯齿
// 定义饼状图的数据
QVector<double> data;
data << 0.1 << 0.2 << 0.3 << 0.4;
QStringList labels;
labels << "A" << "B" << "C" << "D";
// 计算饼状图的总数值
double total = 0.0;
foreach (double value, data) {
total += value;
}
// 定义饼状图的矩形
QRectF rect(50, 50, 300, 300);
// 定义饼状图的起始角度
int startAngle = 0;
// 绘制饼状图
for (int i = 0; i < data.count(); i++) {
double value = data[i];
int angle = qRound(value / total * 360.0);
painter.setBrush(QColor::fromHsv(i * 30, 255, 200)); // 设置扇形的颜色
painter.drawPie(rect, startAngle, angle * 16); // 注意:角度需要乘以16,因为QPainter使用的是1/16度作为单位
startAngle += angle * 16;
// 绘制扇形对应的标签
QString label = labels[i];
QRectF labelRect = rect.adjusted(10, 10, -10, -10);
painter.drawText(labelRect, Qt::AlignCenter, label);
}
// 保存绘制好的Pixmap
pixmap.save("pie_chart.png");
return app.exec();
}
```
这个例子使用QPixmap来绘制饼状图,然后保存为一个PNG图片。你可以根据自己的需求,将绘制好的Pixmap显示在QWidget上,或者直接将它作为纹理绘制在OpenGL场景中。
阅读全文