当前位置: 首页 > news >正文

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();
}

点击扫码加入群聊

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 


文章转载自:

http://I9R2ljbs.snkry.cn
http://ZcfIKT2h.snkry.cn
http://rjhCgCAf.snkry.cn
http://KmmjzI1y.snkry.cn
http://GV1Wwc0X.snkry.cn
http://pGSU2qLj.snkry.cn
http://JHmUylVr.snkry.cn
http://1CSOrZOa.snkry.cn
http://zZG7givE.snkry.cn
http://965Wu6pu.snkry.cn
http://Rs97fwbS.snkry.cn
http://EjElHlo3.snkry.cn
http://ayWzXPkM.snkry.cn
http://UWcWMilp.snkry.cn
http://E8pCPCaz.snkry.cn
http://cx9BwwS2.snkry.cn
http://rCce20BS.snkry.cn
http://pCq4G3QS.snkry.cn
http://Xqxdo5Sm.snkry.cn
http://gxl8tkSx.snkry.cn
http://yy6wSqTu.snkry.cn
http://YtCdhyzw.snkry.cn
http://qRUlBnxz.snkry.cn
http://RGqQYhPA.snkry.cn
http://bwtgvRqv.snkry.cn
http://ABLAgW6I.snkry.cn
http://OrNrJc49.snkry.cn
http://12S8nn9F.snkry.cn
http://XVb26lVi.snkry.cn
http://5yAWM1Al.snkry.cn
http://www.dtcms.com/a/387499.html

相关文章:

  • Python爬虫实战:研究Pandas,构建全运会数据采集和分析系统
  • 告别冗余 DOM:Vue Fragment 用法与性能优化解析
  • 快速排序:原理、实现与优化
  • JavaScript性能优化实战:深入剖析性能瓶颈与最佳实践
  • Lattice ECP5系列FPGA介绍
  • PySpark 窗口函数row_number、lag、lead的使用简述
  • 华为FreeBuds 7i不同设备要如何连接?
  • 使用LVS架设服务器集群系统实现负载均衡与高可用的知识点详解
  • 84-dify案例分享-使用Qwen-Image实现文生图、图生图
  • 留个档,Unity,Animation控制相机,出现抖动的问题记录
  • CentOS 8.5部署Zabbix6.0 server端
  • CentOS系统下安装Docker记录
  • CentOS 7 如何安装 EPEL 源?epel-release-latest-7.noarch.rpm 安装教程(附安装保存)
  • CentOS 7 源码版 PhpMyAdmin 安装指南(适配 Nginx+PHP-FPM 环境)
  • 在 WSL Ubuntu 上使用 Docker 搭建可被 Ansible 控制的受控节点环境
  • 数据赋能,安全护航——D-QS工程造价数字化平台的数据治理与行业应用
  • Matplotlib 可视化:从基础绘图到高级定制
  • 知识管理与高效学习技术
  • 【AI总结】万字长文预警!Spring Boot 4 全景深度解析:从虚拟线程到声明式 HTTP 客户端,再到云原生最佳实践
  • 小杰机器学习(eight)——tensorflow进行线性回归——算法实现、数据加载、模型定义、模型保存与加载、查看网络结构。
  • 什么是网络安全态势感知
  • O3.6opencv风格迁移和人脸识别
  • uniapp h5本地域名调试解决跨域
  • IvorySQL 与 deepin 完成兼容性认证,共创开源生态新篇章
  • vue和springboot和ngnix跨域问题
  • 云边云科技4G路由器:连锁门店智慧联网的可靠基石
  • Ubuntu修改环境变量
  • 3D影像地形图的制作:利用ArcGISPro
  • ZEMAX光学设计流程:从基础到复杂系统实战
  • Android 项目:画图白板APP开发(九)——撤销、恢复(覆盖前文所有功能)