qt QHorizontalPercentBarSeries详解
1、概述
QHorizontalPercentBarSeries 是 Qt 图表模块(Qt Charts)中的一个类,用于创建水平百分比条形图。它继承自 QAbstractBarSeries,专门用于显示多个类别数据占总体的百分比情况。
在水平百分比条形图中,每个类别的所有条形加起来的总长度为 100%,适合用于比较不同类别中各部分占总体的比例关系。例如,可以用来展示不同产品在各地区的市场份额占比等数据。
QHorizontalPercentBarSeries 需要与 QBarSet 配合使用,每个 QBarSet 代表一组数据,而 QHorizontalPercentBarSeries 则负责将这些数据组合成百分比条形图进行展示。
2、重要方法
- void append (QBarSet *set):向系列中添加一个数据组(QBarSet)
- void remove (QBarSet *set):从系列中移除指定的数据组
- QList<QBarSet *> 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:获取标签位置
- void setLabelsFormat (const QString &format):设置标签的显示格式(支持类似 printf 的格式说明符)
3、信号
QHorizontalPercentBarSeries 继承了 QAbstractBarSeries 的信号:
- void clicked (int index, QBarSet *barset):当点击某个条形时发射,参数为索引和对应的数据集
- 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、常用枚举
QHorizontalPercentBarSeries 主要使用父类 QAbstractBarSeries 中定义的枚举:
- QAbstractBarSeries::LabelsPosition:定义标签位置
- LabelsCenter:标签在条形中心
- LabelsInsideEnd:标签在条形内部末端
- LabelsInsideBase:标签在条形内部基部
- LabelsOutsideEnd:标签在条形外部末端
5、cpp 实例
#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;// 创建水平百分比条形图系列QHorizontalPercentBarSeries *series = new QHorizontalPercentBarSeries();series->append(set0);series->append(set1);series->append(set2);// 设置条形宽度series->setBarWidth(0.6);// 显示数值标签series->setLabelsVisible(true);series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);series->setLabelsFormat("%.1f%%");// 创建图表并添加系列QChart *chart = new QChart();chart->addSeries(series);chart->setTitle("各地区产品销售占比");chart->setAnimationOptions(QChart::SeriesAnimations);// 设置类别轴(Y轴)QStringList categories;categories << "华东" << "华北" << "华南" << "西北" << "西南" << "东北";QBarCategoryAxis *axisY = new QBarCategoryAxis();axisY->append(categories);chart->addAxis(axisY, Qt::AlignLeft);series->attachAxis(axisY);// 设置值轴(X轴)- 百分比图中通常不需要显式设置QValueAxis *axisX = new QValueAxis();chart->addAxis(axisX, Qt::AlignBottom);series->attachAxis(axisX);axisX->setRange(0, 100);axisX->setLabelFormat("%d%%");// 创建图表视图QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);//chartView->setMinimumSize(600, 600);// 创建主窗口并显示QMainWindow window;window.setCentralWidget(chartView);window.show();return a.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!