C/C++ QChart如何自定义显示柱状图每根柱子的数值,目前不存在QChartItem类,请给出详细代码
时间: 2024-10-10 22:12:05 浏览: 41
在C++ QtCharts库中,如果你想要自定义每个柱状图的数值显示,虽然没有直接提供`QChartItem`类,但是可以使用`QGraphicsScene`和`QGraphicsTextItem`来添加自定义标签。这里是一个简单的例子,展示如何在每个柱子上添加数值:
```cpp
#include <QApplication>
#include <QQmlEngine>
#include <QtCharts>
#include <QGraphicsScene>
#include <QGraphicsTextItem>
class CustomTextItem : public QGraphicsTextItem {
public:
explicit CustomTextItem(const QString &text, QGraphicsItem *parent = nullptr)
: QGraphicsTextItem(text, parent) {}
void updatePosition(QRectF rect) {
qreal x = rect.left() + rect.width() / 2;
setPos(x, rect.bottom());
}
};
// 主函数
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建图表视图
QChartView chartView;
QChart *chart = new QChart();
chartView.setChart(chart);
// 添加数据系列
QBarSeries *series = new QBarSeries();
series->append(0, 5);
series->append(1, 10);
series->append(2, 15);
chart->addSeries(series);
// 设置柱形图风格
series->barSetStyle(Qt::BarSetBoxed);
chart->setTitle("Custom Bar Chart");
// 获取场景并设置布局
QGraphicsScene *scene = chartView.scene();
scene->setLayout(new QGraphicsGridLayout(scene));
// 遍历每个数据点,创建并添加文本标签
foreach (const auto &dataPoint, series->data()) {
QRectF rect = series->visualRect(dataPoint.index());
CustomTextItem *textItem = new CustomTextItem(QString::number(dataPoint.value()));
textItem->updatePosition(rect);
scene->addItem(textItem);
textItem->setParentItem(series->graphicsItem()); // 将文字与柱子关联
}
// 显示窗口
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
layout->addWidget(&chartView);
window.show();
return app.exec();
}
阅读全文