Qt QHorizontalStackedBarSeries详解
1、概述
QHorizontalStackedBarSeries 是 Qt Charts 模块中的一个类,用于创建水平堆叠条形图。它继承自 QAbstractBarSeries 类,允许将多个数据系列堆叠在一起显示,每个条形由多个部分组成,这些部分共同构成一个完整的条形,适合展示整体与部分的关系数据。
水平堆叠条形图中,类别沿垂直轴排列,值沿水平轴显示,每个类别的条形由多个数据系列的数值叠加而成,便于比较不同类别之间的总量以及各组成部分的占比。
2、重要方法
QHorizontalStackedBarSeries(QObject *parent = nullptr)
:构造函数,创建一个水平堆叠条形图系列对象。void append(QAbstractBarSet *set)
:向系列中添加一个数据组(QBarSet)。void remove(QAbstractBarSet *set)
:从系列中移除指定的数据组。QList<QAbstractBarSet *> barSets() const
:返回系列中所有的数据组列表。void setBarWidth(qreal width)
:设置条形的宽度,范围通常在 0.0 到 1.0 之间(相对于类别间隔)。qreal barWidth() const
:获取当前条形的宽度。void setLabelsVisible(bool visible)
:设置是否显示数据标签。bool labelsVisible() const
:判断数据标签是否可见。void setLabelsPosition(QAbstractBarSeries::LabelsPosition position)
:设置数据标签的位置(如标签在条形内部或外部)。QAbstractBarSeries::LabelsPosition labelsPosition() const
:获取数据标签的位置。
3、信号
QHorizontalStackedBarSeries 继承了 QAbstractBarSeries 的信号,主要包括:
void clicked(int index, QAbstractBarSet *barset)
:当用户点击某个数据组的条形时触发,参数为类别索引和被点击的数据组。void hovered(bool status, int index, QAbstractBarSet *barset)
:当鼠标悬停在条形上或离开时触发,status 表示是否悬停,index 为类别索引,barset 为对应的数据组。void pressed(int index, QAbstractBarSet *barset)
:当鼠标按下条形时触发。void released(int index, QAbstractBarSet *barset)
:当鼠标释放条形时触发。void doubleClicked(int index, QAbstractBarSet *barset)
:当双击条形时触发。
4、常用枚举
QHorizontalStackedBarSeries 主要使用父类 QAbstractBarSeries 中的枚举:
QAbstractBarSeries::LabelsPosition
:定义数据标签的位置LabelsCenter
:标签位于条形中心LabelsInsideEnd
:标签位于条形内部的末端LabelsInsideBase
:标签位于条形内部的基部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 *set1 = new QBarSet("产品A");QBarSet *set2 = new QBarSet("产品B");QBarSet *set3 = new QBarSet("产品C");// 为数据组添加数据*set1 << 1 << 2 << 3 << 4 << 5 << 6;*set2 << 5 << 4 << 3 << 2 << 1 << 0;*set3 << 3 << 3 << 3 << 3 << 3 << 3;// 创建水平堆叠条形系列并添加数据组QHorizontalStackedBarSeries *series = new QHorizontalStackedBarSeries();series->append(set1);series->append(set2);series->append(set3);// 设置条形宽度series->setBarWidth(0.6);// 显示数据标签series->setLabelsVisible(true);series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);// 创建图表并添加系列QChart *chart = new QChart();chart->addSeries(series);chart->setTitle("各地区产品销售分布");chart->setAnimationOptions(QChart::SeriesAnimations);// 定义类别轴(垂直轴)QStringList categories;categories << "华东" << "华北" << "华南" << "西北" << "西南" << "东北";QBarCategoryAxis *axisY = new QBarCategoryAxis();axisY->append(categories);chart->addAxis(axisY, Qt::AlignLeft);series->attachAxis(axisY);// 定义数值轴(水平轴)QValueAxis *axisX = new QValueAxis();axisX->setRange(0, 15);axisX->setTitleText("销售额 (万元)");chart->addAxis(axisX, Qt::AlignBottom);series->attachAxis(axisX);// 创建图表视图并显示QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);QMainWindow window;window.setCentralWidget(chartView);window.resize(800, 600);window.show();return a.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!