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

存储图表数据的模板类QCPDataContainer

一、QCPDataContainer 概述

QCPDataContainer 是 QCustomPlot 中用于存储图表数据的模板类,作为各种图表数据的基础容器,提供高效的数据管理和访问接口。

二、主要派生类

类名关联图表类型描述
QCPGraphDataContainerQCPGraph存储曲线图数据
QCPCurveDataContainerQCPCurve存储参数曲线数据
QCPBarsDataContainerQCPBars存储柱状图数据
QCPStatisticalBoxDataContainerQCPStatisticalBox存储箱线图数据

三、核心属性

属性类型描述
sizeint数据点数量
isEmptybool是否为空容器

四、通用方法

1. 数据操作方法

方法参数返回值描述
addconst DataType &datavoid添加单个数据点
addconst QVector<DataType> &datavoid批量添加数据
setconst QVector<DataType> &datavoid替换所有数据
removeint indexvoid删除指定索引数据
removeBeforedouble sortKeyvoid删除小于指定键值的数据
removeAfterdouble sortKeyvoid删除大于指定键值的数据
clear-void清空所有数据

2. 数据访问方法

方法参数返回值描述
atint indexconst DataType&访问指定索引数据
operator[]int indexconst DataType&访问指定索引数据
begin-iterator返回开始迭代器
end-iterator返回结束迭代器
constBegin-const_iterator返回常量开始迭代器
constEnd-const_iterator返回常量结束迭代器
findBegindouble sortKeyiterator查找第一个≥key的数据
findEnddouble sortKeyiterator查找第一个>key的数据

3. 范围查询方法

方法参数返回值描述
keyRangebool &foundRangeQCPRange获取键值范围
valueRangebool &foundRangeQCPRange获取值范围
span-double获取键值跨度

五、QCPGraphDataContainer 专用方法

方法描述
add/set 重载支持直接传入(key,value)对
valueRange 重载支持指定键值范围查询

六、QCPCurveDataContainer 专用方法

方法描述
point通过索引获取QPointF
indexToT索引转参数t值

七、基础使用示例

cpp

// 创建图形数据容器
QSharedPointer<QCPGraphDataContainer> data(new QCPGraphDataContainer);// 添加数据
data->add(QCPGraphData(1.0, 2.5));
data->add(QCPGraphData(2.0, 3.1));// 批量添加
QVector<QCPGraphData> points;
points << QCPGraphData(3.0, 4.2) << QCPGraphData(4.0, 5.8);
data->add(points);// 访问数据
double firstValue = data->at(0)->value;// 范围查询
bool found;
QCPRange keyRange = data->keyRange(found);// 关联到图形
customPlot->graph(0)->setData(data);

八、高级用法示例

1. 高效数据更新

cpp

// 获取可修改的引用
auto &dataMap = *customPlot->graph(0)->data().data();// 直接操作数据
dataMap.clear();
for (int i=0; i<1000; ++i) {dataMap.add(QCPGraphData(i, qSin(i/10.0)));
}// 通知更新
customPlot->graph(0)->data()->set(dataMap, false); // 不自动计算范围
customPlot->rescaleAxes();

2. 数据范围筛选

cpp

// 筛选x在[2.0, 5.0]范围内的数据
auto beginIt = customPlot->graph(0)->data()->findBegin(2.0);
auto endIt = customPlot->graph(0)->data()->findEnd(5.0);QVector<QCPGraphData> filteredData;
for (auto it=beginIt; it!=endIt; ++it) {filteredData.append(*it);
}

3. 性能优化技巧

cpp

// 预分配内存
data->reserve(10000); // 预分配10000个点的空间// 批量操作减少重绘
customPlot->setNotAntialiasedElements(QCP::aePlottables); // 临时关闭抗锯齿
// ...大数据操作...
customPlot->setAntialiasedElements(QCP::aePlottables); // 恢复

九、各派生类数据格式

1. QCPGraphDataContainer

cpp

struct QCPGraphData {double key;   // x坐标double value; // y坐标
}

2. QCPCurveDataContainer

cpp

struct QCPCurveData {double t;     // 参数double key;   // x坐标double value; // y坐标
}

3. QCPBarsDataContainer

cpp

struct QCPBarsData {double key;   // x坐标double value; // 柱高
}

QCPDataContainer 提供了高效灵活的数据管理能力,通过合理使用可以:

  • 处理大规模数据集

  • 实现动态数据更新

  • 支持复杂数据操作

  • 优化图表绘制性能

http://www.xdnf.cn/news/781.html

相关文章:

  • Vue.js核心功能实现
  • 线性DP:最长上升子序列(子序列可不连续,子数组必须连续)
  • vuex实现同一页面radio-group点击不同按钮显示不同表单
  • nrf52840 16通道adc+DMA采集电压 C语言代码
  • Linux系统编程---孤儿进程与僵尸进程
  • 【python】尾部多写个逗号会把表达式变成 tuple
  • 俄罗斯方块-简单开发版
  • 企业工商信息查询API接口开发指南 - 基于模糊检索的工商数据补全方案
  • 报告总结笔记 | Jeff Dean ETH AI趋势 笔记:AI 的重要趋势:我们是如何走到今天的,我们现在能做什么,以及我们如何塑造 AI 的未来?
  • 边缘损失函数
  • 面向对象编程的四大特性详解:封装、继承、多态与抽象
  • 远程服务调用的一些注意事项
  • 栈和队列(C语言)
  • 抱佛脚之学SSM一
  • AIGC-几款医疗健康智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)
  • 阿里HumanAIGC 团队开源实时数字人项目ChatAnyone
  • 正则化和优化策略
  • 体育用品有哪些·棒球1号位
  • 脚本中**通配符用法解析
  • 【CentOs】构建云服务器部署环境
  • 基数平衡多伯努利滤波器(CB-MBM):基于约束优化的多目标数量与存在概率联合估计方法
  • 在Fortran和Python之间共享变量
  • 一个Nuxt3 SSR服务端渲染简洁好用的开源个人博客系统 交互设计体验简单 腾讯markdown编辑器 支持drawio画图
  • STM32开发过程中碰到的问题总结 - 4
  • [Windows] 星光桌面精灵 V0.5
  • OSI七层模型
  • 开源项目FastAPI-MCP:一键API转换MCP服务
  • 信创时代编程开发语言选择指南:国产替代背景下的技术路径与实践建议
  • MIT6.S081-lab4前置
  • ROS机器人开发实践->机器人建模与仿真