Qt QPercentBarSeries详解
1、概述
QPercentBarSeries 是 Qt 图表模块(Qt Charts)中用于创建百分比堆积条形图的类,它继承自 QAbstractBarSeries。百分比堆积条形图将每个类别的别的数据显示为一个条形,其中部分按比例类别中的不同系列数据按百分比分割,每个条形的总高度始终为 100%,非常适合展示各部分占总体的比例关系。
2、重要方法
void append(QAbstractBarSet *set)
:向系列中添加一个数据组(QBarSet)void remove(QAbstractBarSet *set)
:从系列中移除指定的数据组QList<QAbstractBarSet *> barSets() const
:返回系列中所有数据组的列表void clear()
:清空系列中所有的数据组QBarCategoryAxis *categoriesAxis() const
:返回用于 X 轴的类别轴void setCategoriesAxis(QBarCategoryAxis *axis)
:设置 X 轴的类别轴QValueAxis *valueAxis() const
:返回用于 Y 轴的值轴void setValueAxis(QValueAxis *axis)
:设置 Y 轴的值轴QString name() const
:返回系列的名称void setName(const QString &name)
:设置系列的名称
3、信号
void clicked(int index, QBarSet *barset)
:当点击条形图中某个具体数据块时触发,参数为索引和对应的数据组void hovered(bool status, int index, QBarSet *barset)
:当鼠标悬停在数据块上或离开时触发,status 表示是否悬停,index 为索引,barset 为对应的数据组void pressed(int index, QBarSet *barset)
:当在数据块上按下鼠标时触发void released(int index, QBarSet *barset)
:当在数据块上释放鼠标时触发void doubleClicked(int index, QBarSet *barset)
:当双击数据块时触发
4、常用枚举
QPercentBarSeries 本身没有定义专门的枚举,但它继承自 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 <QHCandlestickModelMapper>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;// 创建百分比堆积条形图系列QPercentBarSeries *series = new QPercentBarSeries();series->append(set0);series->append(set1);series->append(set2);series->setName("各地区产品销售占比");// 创建图表并添加系列QChart *chart = new QChart();chart->addSeries(series);chart->setTitle("2023年各地区产品销售占比统计");chart->setAnimationOptions(QChart::SeriesAnimations);// 创建类别轴(X轴)QStringList categories;categories << "华东" << "华北" << "华南" << "西北" << "西南" << "东北";QBarCategoryAxis *axisX = new QBarCategoryAxis();axisX->append(categories);chart->addAxis(axisX, Qt::AlignBottom);series->attachAxis(axisX);// 创建值轴(Y轴)QValueAxis *axisY = new QValueAxis();axisY->setRange(0, 100);axisY->setLabelFormat("%d%%");chart->addAxis(axisY, Qt::AlignLeft);series->attachAxis(axisY);// 设置数据标签可见series->setLabelsVisible(true);series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);// 创建图表视图并显示QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);chartView->resize(800, 600);chartView->show();return a.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!