Qt QStackedBarSeries详解
1、概述
QStackedBarSeries 是 Qt Charts 模块中用于创建堆叠柱状图的类,它继承自 QAbstractBarSeries。堆叠柱状图将多个数据系列叠加显示在同一柱状图中,便于直观展示整体数据以及各组成部分的占比关系。
QStackedBarSeries 可以包含多个 QBarSet 对象,每个 QBarSet 代表一组数据,这些数据会在图表中堆叠显示。与普通柱状图(QBarSeries)不同,堆叠柱状图的每个类别只显示一个柱子,该柱子的高度是同一类别中所有 QBarSet 数据的总和。
2、重要方法
QStackedBarSeries(QObject *parent = nullptr)
:构造函数,创建一个堆叠柱状图系列void append(QBarSet *set)
:添加一个 QBarSet 到系列中void remove(QBarSet *set)
:从系列中移除指定的 QBarSetQList<QBarSet *> barSets() const
:返回系列中所有的 QBarSet 对象void clear()
:清除系列中所有的 QBarSetQAbstractAxis *axisX() const
:返回 X 轴QAbstractAxis *axisY() const
:返回 Y 轴void setAxisX(QAbstractAxis *axis)
:设置 X 轴void setAxisY(QAbstractAxis *axis)
:设置 Y 轴void attachAxis(QAbstractAxis *axis)
:将系列附加到指定轴void detachAxis(QAbstractAxis *axis)
:将系列与指定轴分离QString name() const
:返回系列名称void setName(const QString &name)
:设置系列名称
3、信号
void barsetsAdded(const QList<QBarSet *> &sets)
:当添加一个或多个 QBarSet 时发射void barsetsRemoved(const QList<QBarSet *> &sets)
:当移除一个或多个 QBarSet 时发射void clicked(int index, QBarSet *barset)
:当点击某个 QBarSet 的数据项时发射,index 是数据项索引void hovered(bool status, int index, QBarSet *barset)
:当鼠标悬停在数据项上或离开时发射void pressed(int index, QBarSet *barset)
:当按下数据项时发射void released(int index, QBarSet *barset)
:当释放数据项时发射void doubleClicked(int index, QBarSet *barset)
:当双击数据项时发射
4、常用枚举
QStackedBarSeries 本身没有定义枚举,但它继承自 QAbstractBarSeries,常用的枚举有:
QAbstractBarSeries::LabelsPosition
:标签位置枚举QAbstractBarSeries::LabelsCenter
:标签在柱形中心QAbstractBarSeries::LabelsInsideEnd
:标签在柱形内部顶端QAbstractBarSeries::LabelsInsideBase
:标签在柱形内部底端QAbstractBarSeries::LabelsOutsideEnd
:标签在柱形外部顶端
5、C++ 实例
#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QAreaSeries>
#include <QLegend>
#include <QPieSlice>QT_CHARTS_USE_NAMESPACEint main(int argc, char *argv[])
{QApplication a(argc, argv);// 创建数据集合QBarSet *set0 = new QBarSet("产品A");QBarSet *set1 = new QBarSet("产品B");QBarSet *set2 = new QBarSet("产品C");// 为数据集合添加数据*set0 << 1 << 2 << 3 << 4 << 5 << 6;*set1 << 5 << 4 << 3 << 2 << 1 << 0;*set2 << 3 << 3 << 3 << 3 << 3 << 3;// 创建堆叠柱状图系列QStackedBarSeries *series = new QStackedBarSeries();series->append(set0);series->append(set1);series->append(set2);series->setName("季度销售数据");// 设置数据标签可见series->setLabelsVisible(true);series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);// 创建图表并添加系列QChart *chart = new QChart();chart->addSeries(series);chart->setTitle("各产品季度销售数据对比");chart->setAnimationOptions(QChart::SeriesAnimations);// 定义X轴类别QStringList categories;categories << "Q1" << "Q2" << "Q3" << "Q4" << "Q5" << "Q6";QBarCategoryAxis *axisX = new QBarCategoryAxis();axisX->append(categories);chart->addAxis(axisX, Qt::AlignBottom);series->attachAxis(axisX);// 创建Y轴QValueAxis *axisY = new QValueAxis();axisY->setRange(0, 15);axisY->setTitleText("销售额 (万元)");chart->addAxis(axisY, Qt::AlignLeft);series->attachAxis(axisY);// 创建图表视图QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);// 创建主窗口并显示QMainWindow window;window.setCentralWidget(chartView);window.resize(800, 600);window.show();return a.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!