数据选择机制

在QCustomPlot中,每个绘图表都可以由用户或以编程方式选择。如果用户能够以任何方式选择数据,则必须在QCustomPlot :: setInteractions中设置交互标志QCP :: iSelectPlottables。

数据选择粒度

选择粒度可以通过QCPAbstractPlottable :: setSelectable通过指定相应的QCP :: SelectionType来控制。例如,当使用QCP :: stMultipleDataRanges时,用户将完全自由选择自己选择的数据点和不选择的数据点。另一方面,如果我们使用QCP :: stDataRange,则选择机制将强制所选数据始终是一个连续范围。因此,如果用户选择两个遥远的数据点(通常在按住multi-select修饰符的同时Ctrl),则这两个点之间的所有数据点也会被选中。

这些图像显示了拖动指示的选择矩形时不同选择类型的效果:

无声

整个

stSingleData

stDataRange

stMultipleDataRanges

单击选择并选择矩形

用户可以通过两种方式选择数据点:

第一种方法是用鼠标光标单击数据点。在这种情况下,如果用户要一个接一个地选择多个数据点,则必须按住多选修饰符(QCustomPlot :: setMultiSelectModifier),并且必须在QCustomPlot :: setInteractions中设置QCP :: iMultiSelect。

另一种方法是将选择矩形拖动到应选择的数据点上。如果QCustomPlot :: setSelectionRectMode设置为QCP :: srmSelect,则有可能。请注意,设置了选择矩形模式(不是QCP :: srmNone)时,鼠标拖动将不会转发到基础布局元素。这也意味着无法再用鼠标拖动轴范围。如果希望为用户提供轴范围拖动和数据选择/范围缩放功能,请在处理交互之前使用QCustomPlot :: setSelectionRectMode在模式之间进行切换,例如,对QCustomPlot :: mousePress或QCustomPlot :: mouseMove做出反应信号。例如,您可以检查用户是否持有某个键盘修饰符,然后决定应设置哪种模式。

检索所选数据

一旦通过用户交互或以编程方式更改了绘图表的选择状态,受影响的绘图表将发出信号QCPAbstractPlottable :: selectionChanged,并以QCPDataSelection的形式携带当前选择的数据点。该信号的过载是可用的,它仅指示bool出绘图表是否具有任何选定的数据点。

通过调用QCustomPlot :: selectedPlottables,可以检索当前已选择数据点的绘图表列表。可以通过QCPAbstractPlottable :: selection检索绘图表的当前选择。还有一种专门用于QCPGraph绘图表的方法,称为QCustomPlot :: selectedGraphs。

访问数据选择

甲QCPDataSelection是列表QCPDataRange情况下,其本身持有的开始结束相应数据的范围索引。对于一维绘图表(源自QCPAbstractPlottable1D,例如QCPGraph,QCPCurve,QCPBars等),可以使用数据容器的at(int index)方法按索引访问数据点。或者,您可以简单地将整数索引添加到数据容器的begin()迭代器中。

例如,以下代码片段计算图形数据选择的平均值:

 QCPDataSelection selection = graph->selection();double sum = 0;foreach (QCPDataRange dataRange, selection.dataRanges()){QCPGraphDataContainer::const_iterator begin = graph->data()->at(dataRange.begin()); // get range begin iterator from indexQCPGraphDataContainer::const_iterator end = graph->data()->at(dataRange.end()); // get range end iterator from indexfor (QCPGraphDataContainer::const_iterator it=begin; it!=end; ++it){// iterator "it" will go through all selected data points, as an example, we calculate the value averagesum += it->value;}}double average = sum/selection.dataPointCount();
双平均值=总和/选择。dataPointCount();

由于QCPDataSelection实例未与特定的绘图表紧密绑定,因此它们包含的索引可能超出了绘图表的有效数据范围。可通过访问绘图表的数据容器并调用QCPDataContainer :: dataRange来检索有效数据范围。这样,您可以检查给定的QCPDataSelection是否包含在有效范围内,并在必要时通过分别使用QCPDataSelection :: contains和QCPDataSelection :: intersection对其进行修整。

当然,只要检索选择后未更改,由QCPAbstractPlottable :: selection返回的数据选择始终在绘图表的数据范围内。

检索给定像素位置的数据点

如果只想找出某个绘图表的哪个数据点在给定的像素位置处或附近(不需要单击或实际选择事件),则可以使用QCPAbstractPlottable :: selectTest。例如,以下代码检索在像素坐标中最接近给定QPoint的数据点的迭代器:

QCPGraphDataContainer::const_iterator it = graph->data()->constEnd();QVariant details;if (graph->selectTest(QPoint(123, 456), false, &details)) // QPoint could be e.g. event->pos() of a mouse event{QCPDataSelection dataPoints = details.value<QCPDataSelection>();if (dataPoints.dataPointCount() > 0)it = graph->data()->at(dataPoints.dataRange().begin());}// iterator "it" now carries the data point at pixel coordinates (123, 456), or constEnd if no data point was hit.

12.QCustomPlot中数据选择机制相关推荐

  1. 解决EF 4.0 中数据缓存机制

    EF4.0默认开启缓存机制,如果想要禁用缓存机制的话,则须加上一句话:_db.CreateObjectSet().MergeOption = MergeOption.OverwriteChanges; ...

  2. 12,matlab中数据标记点选项参数,颜色 选项是参数,线性选项参数

    来源: 第4章 MATLAB图形绘制.ppt https://max.book118.com/html/2016/0823/52575275.shtm

  3. QCustomPlot基础教程(十)——QCustomPlot中图例的相关设置

    目录 1.前言 2.显示图例 3.设置图例位置 4.设置图例背景 5.设置图例名称 6.设置边框隐藏 7.其他设置 8.拓展1--将图例统一放在下方 9.拓展2--设置图例与曲线同步选中 1.前言 基 ...

  4. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  5. 项目数据表中的并发控制机制之version

    version:中文意思其实就是版本的意思,主要的目的就是在并发的情况下进行一个版本的校验来进行修改操作! 在这里version的值就是代表了它到底是乐观锁还是悲观锁,下面解释下什么是乐观锁什么是悲观 ...

  6. Python中的驻留机制:小数据池和代码块

    Python 中的驻留机制主要有两个:小数据池和代码块.驻留机制并不是学习 Python 过程中特别重要的概念,我们学习小数据池的目的主要有两个方面: 1.解决日后写代码过程中可能出现的疑惑.在后期开 ...

  7. MVC中 数据底层联合JQUERY实现动态的安全的验证机制

    实体的验证分部类定义如下 前台controller里进行数据有效性的验证,成功就进行数据处理,不成功就返回错误 前台页面配合JQuery强大的验证功能,实现动态验证 MVC集成表单验证输出单元,显示验 ...

  8. 【软件测试】边界测试中所选择的输入测试数据一定是有效数据(错)

    边界测试中所选择的输入测试数据不一定是有效数据. 边界测试的测试用例选择原则: 如果输入条件规定了值的范围,则应该取刚达到这个范围的边界值,以及刚刚超过这个范围边界的值作为测试输入数据: 如果输入条件 ...

  9. 请从1到35之间随机选择5个数,再从1到12中随机选择两个数,作为双色球的开奖号码...

    好的,我来随机选择双色球的开奖号码.根据您的要求,在1到35之间随机选择5个数,再从1到12中随机选择2个数,得到的开奖号码是:16, 5, 22, 31, 29,红球为8,蓝球为11.请注意,这只是 ...

最新文章

  1. 30秒的PHP代码片段(2)数学 - Math
  2. [原创]java WEB学习笔记86:Hibernate学习之路-- -映射 n-n 关系,单向n-n,双向n-n
  3. JavaScript学习笔记——underscore操作对象的方法
  4. 用共振频率去进行图片分类的尝试
  5. JVM性能优化之堆区域OOM问题
  6. python+pyqt5实现24点小游戏
  7. 差分信号_形象解读差分信号,它比单端信号强在哪?
  8. 如何动态为 tabstrip 中的 tab 页签指定标题
  9. 你觉得你非常了解Javascript?
  10. 低压电力线载波通信原理
  11. Android平台车牌识别SDK
  12. Android Toast 吐司 自定义使用 展示图片 Toast自定义教程(一)
  13. linux如何使用磁盘阵列卡,Linux的RAID磁盘阵列与阵列卡
  14. H5是什么?H5怎么做?带你全面了解H5游戏制作
  15. 2022年起重机司机(限桥式起重机)考试题库模拟考试平台操作
  16. 论文笔记:Straight to the Tree: Constituency Parsing with Neural Syntactic Distance
  17. docker- health check
  18. 美团技术分享:大众点评App的短视频耗电量优化实战
  19. Win11安装 eNSP模拟器
  20. torchtorchvision对应版本

热门文章

  1. 分享几款免费实用的国产内网穿透工具
  2. HTML5 SVG用marker画箭头
  3. zigbee 编译选项
  4. Polycom被收购,视频会议市场好玩了
  5. 企业怎样实现微信营销?SCRM软件可以做到吗?
  6. 保研经历--七月夏令营
  7. [(可持久化)字典树 优化建图][2-SAT] LOJ#6036. 雅礼集训 2017 Day4. 编码
  8. xadmin2.0 下载和安装
  9. oracle创建app_profile,Oracle PUP(PRODUCT_USER_PROFILE)配置和使用
  10. C/C++编程:运算符重载