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

存储图表数据的模板类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 提供了高效灵活的数据管理能力,通过合理使用可以:

  • 处理大规模数据集

  • 实现动态数据更新

  • 支持复杂数据操作

  • 优化图表绘制性能

相关文章:

  • TDengine 性能监控与调优实战指南(二)
  • 一文粗通 Celery 分布式任务队列
  • RV1126网络环境TFTPNFS搭建(四)
  • 产品经理学习过程
  • PG CTE 递归 SQL 翻译为 达梦版本
  • 指针(2)
  • gorm基础:自定义数据类型
  • 【Vulkan 入门系列】创建帧缓冲、命令池、命令缓存,和获取图片(六)
  • 【leetcode100】一和零
  • Linux | I.MX6ULL 文件系统
  • github新建一个远程仓库并添加了README.md,本地git仓库无法push
  • 小迪抓包技术算法加密(6-9天)
  • 如何高效利用呼叫中心系统和AI语音机器人
  • c++基础·左值右值
  • 京东百亿补贴杀入外卖市场:一场关乎即时零售未来的攻防战
  • 【Rust 精进之路之第9篇-所有权·核心】规则与移动 (Move):Rust 内存安全基石详解
  • SQL注入 02
  • [SpringBoot-1] 概述和快速入门(使用vscode)
  • 【C语言函数部分的重要知识点】--自定义函数,static和extern
  • 【2025软考高级架构师】——计算机系统基础(7)
  • 上海群文创作大检阅,102个节目角逐群星奖
  • 玉渊谭天丨这是一个时代的结束
  • 俄罗斯与乌克兰互换246名在押人员
  • 正义网评“一男两女举办婚礼”:“一夫多妻”流量闹剧该歇了
  • 大外交|习近平时隔9年访柬,专家:中柬铁杆友谊的地区意义日渐凸显
  • 海南陵水县一别墅区被指违建已获确认,60岁举报人曾两度遭人蒙面袭击