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

Qt QVBarModelMapper详解

1、概述

QVBarModelMapper 是 Qt Charts 模块中的一个类,用于在垂直条形图(QBarSeries)和数据模型(QAbstractItemModel)之间建立映射关系。它实现了数据模型与图表之间的双向数据同步,当模型中的数据发生变化时,图表会自动更新;反之,当图表数据通过交互修改时,模型也会相应更新。

QVBarModelMapper 特别适用于需要将数据源中的数据以垂直条形图形式可视化的场景,支持多组数据系列的展示,每组数据对应模型中的一列。

2、重要方法

  • QAbstractItemModel *model() const:返回当前关联的数据模型

  • void setModel(QAbstractItemModel *model):设置关联的数据模型

  • QBarSeries *series() const:返回当前关联的条形图系列

  • void setSeries(QBarSeries *series):设置关联的条形图系列

  • int firstBarSetColumn() const:返回第一个数据集在模型中的列索引

  • void setFirstBarSetColumn(int firstBarSetColumn):设置第一个数据集在模型中的列索引

  • int lastBarSetColumn() const:返回最后一个数据集在模型中的列索引

  • void setLastBarSetColumn(int lastBarSetColumn):设置最后一个数据集在模型中的列索引

  • int firstRow() const:返回模型中映射的起始行索引

  • void setFirstRow(int firstRow):设置模型中映射的起始行索引

  • int rowCount() const:返回映射的行数

  • void setRowCount(int rowCount):设置映射的行数

  • int categoryRow() const:返回类别所在的行索引

  • void setCategoryRow(int categoryRow):设置类别所在的行索引

3、信号

  • void modelReplaced():当数据模型被替换时触发
  • void seriesReplaced():当条形图系列被替换时触发
  • void firstBarSetColumnChanged():当第一个数据集列索引变化时触发
  • void lastBarSetColumnChanged():当最后一个数据集列索引变化时触发
  • void firstRowChanged():当起始行索引变化时触发
  • void rowCountChanged():当映射的行数变化时触发
  • void categoryRowChanged():当类别行索引变化时触发

4、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);// 创建主窗口QMainWindow window;window.setWindowTitle("QVBarModelMapper 示例");// 1. 创建数据模型QStandardItemModel model(5, 3); // 5行3列model.setHeaderData(0, Qt::Horizontal, "产品A");model.setHeaderData(1, Qt::Horizontal, "产品B");model.setHeaderData(2, Qt::Horizontal, "产品C");// 填充数据for (int row = 0; row < 5; ++row) {model.setData(model.index(row, 0), QVariant(rand() % 100));model.setData(model.index(row, 1), QVariant(rand() % 100));model.setData(model.index(row, 2), QVariant(rand() % 100));// 设置X轴类别(第一列作为类别名称)model.setData(model.index(row, 0), QVariant(QString("第%1季度").arg(row+1)), Qt::DisplayRole);}// 2. 创建条形图系列QBarSeries *series = new QBarSeries();// 3. 创建映射器,关联模型和图表QVBarModelMapper *mapper = new QVBarModelMapper();mapper->setModel(&model);          // 设置数据模型mapper->setSeries(series);         // 设置图表系列mapper->setFirstBarSetColumn(0);   // 第一个数据集列索引mapper->setLastBarSetColumn(2);    // 最后一个数据集列索引mapper->setFirstRow(0);            // 起始行索引mapper->setRowCount(5);            // 映射行数// 4. 创建图表和坐标轴QChart *chart = new QChart();chart->addSeries(series);chart->setTitle("产品季度销售数据");chart->setAnimationOptions(QChart::SeriesAnimations);// X轴QBarCategoryAxis *axisX = new QBarCategoryAxis();chart->addAxis(axisX, Qt::AlignBottom);series->attachAxis(axisX);// Y轴QValueAxis *axisY = new QValueAxis();axisY->setRange(0, 100);axisY->setTitleText("销售额");chart->addAxis(axisY, Qt::AlignLeft);series->attachAxis(axisY);// 5. 创建图表视图并显示QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);window.setCentralWidget(chartView);window.resize(800, 600);window.show();return a.exec();
}

点击扫码加入群聊

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

           

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

http://www.dtcms.com/a/389128.html

相关文章:

  • 【学习】通义DeepResearch之WebWalker-让大模型“深度潜水”网页信息
  • Bsin-PaaS:企业级开源RWA解决方案的技术革新与实践
  • 贪心算法应用:装箱问题(FFD问题)详解
  • GO项目开发规范文档解读
  • 声明式导航VS编程式导航
  • Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
  • 华硕主板Z790 Windows11 + Linux (Ubuntu22.04) 双系统安装
  • 第二部分:VTK核心类详解(第24章 vtkWidget控件类系统)
  • 贪心算法应用:在线租赁问题详解
  • 【Redis】缓存击穿的解决办法
  • 一款基于Java+Vue+Uniapp的全栈外卖系统
  • JDK 25(长期支持版) 发布,新特性解读!
  • MySQL InnoDB存储引擎Master Thread主线程工作原理详细介绍
  • 数字孪生:智慧工厂迈向未来的关键力量
  • 1.12-HTTP数据包
  • HTTP Request Blocker的下载与使用
  • 【通义万相】蓝耘元生代 | 文生视频新跃迁:通义万相2.1部署与应用
  • 2025测试效率升级:20个Linux命令的日志与性能优化!
  • RK3576 Android14 rknn_yolov5_demo使用
  • LeetCode算法日记 - Day 45: 为高尔夫比赛砍树、矩阵
  • LeetCode:18.矩阵置零
  • android安卓定制自动点赞软件--android.apk安装包/点赞脚本
  • 数据存储架构怎么选?一文分清数据仓库、数据湖、湖仓一体
  • 【线性代数:从基向量理解线性变换与矩阵】附Python代码
  • MCP与企业数据深度融合—ERP、CRM及数据仓库的统一接入架构与实践
  • MySQL高级语法
  • rust编写web服务04-数据库初体验
  • 芋道开源框架应用的小问题。细节!!
  • PyQt6之QDateEdit和QTimeEdit格式设置
  • FTP协议在国产化环境下的最佳替代方案是什么?