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

Qt扩展-QCustomPlot 用户交互

QCustomPlot 用户交互

  • 一、概述
  • 二、操作范围
  • 三、选择机制
    • 1. 控制Graph的可选择性和选择状态
    • 2. 所选对象的外观
    • 3. 多部分对象
    • 4. 对选择变化做出反应
  • 四、用户交互信号

一、概述

QCustomPlot提供了多个内置的用户交互。它们大致可以分为

  • 通过用鼠标拖动和滚动鼠标滚轮进行范围操作
  • 通过点击选择绘图实体
  • 用户点击绘图实体时发出的信号

二、操作范围

这个其实就是开启鼠标上下左右平移或者缩放Graph的功能

用户操作轴范围的默认方法是在相应的QCPAxisRect上执行拖动操作。
在这里插入图片描述

要在QCustomPlot控件中启用范围拖动,需要将标志 QCP::iRangeDrag 添加到当前允许的交互中。这可以通过 customPlot->setInteraction(QCP::iRangeDrag, true) 来完成。要只允许在一个方向上拖动,请使用 QCPAxisRect::setRangeDrag 并指定Qt::Vertical或Qt::Horizontal。默认列表允许两个方向Qt::Vertical | Qt::Horizontal。

在拖动操作期间,通过QCPAxisRect::setRangeDragAxes配置的轴会实时更新其范围,自动导致重绘。这给用户的印象是通过用鼠标抓取来移动绘图坐标平面。最初,将范围拖动轴配置为矩形的底部和左侧轴。对于QCustomPlot控件的默认轴矩形,它们是QCustomPlot::xAxis和QCustomPlot::yAxis。

要改变范围的大小,即放大或缩小绘图,用户可以使用鼠标滚轮。此行为由交互标志QCP::iRangeZoom 控制,该标志也需要通过 QCustomPlot::setInteraction 激活。就像范围拖动一样,缩放也可以根据受影响的轴和方向进行选择,参见函数QCPAxisRect::setRangeZoomAxes和QCPAxisRect::setRangeZoom

。此外,缩放强度可以通过QCPAxisRect::setRangeZoomFactor来控制。在普通鼠标硬件上,一个鼠标滚轮步对应于应用于轴范围的这个因子。如果因子大于1,则向前滚动鼠标滚轮会减小范围(放大),向后滚动则会增大范围(缩小)。若要扭转此行为,请将鼠标滚轮缩放因子设置为小于1(但大于零)。缩放总是以绘图中当前鼠标光标的位置为中心。

这意味着将光标指向感兴趣的功能并滚动鼠标滚轮可以放大该功能。

三、选择机制

在这里插入图片描述

QCustomPlot提供了一种选择机制,允许用户选择图中的每个组件,如轴和图形。可以使用以 QCP::iSelect(…) 开头的交互标志来控制某类实体在图中是否通常可选择。例如,设置customPlot->setInteraction(QCP::iSelectPlottables, true)将允许用户通过点击它们来选择绘图(例如图形)。请查看所有交互标志的QCP::Interaction文档。

要允许同时选择多个对象,可以设置 QCP::iMultiSelect交互 标志。然后,用户可以通过按住多选择修饰符(参见QCustomPlot::setMultiSelectModifier)连续选择多个对象,默认情况下是Ctrl。

1. 控制Graph的可选择性和选择状态

可以使用单个对象上的setSelectable函数进一步微调可选择性。例如,如果绘图中的特定图形不能被用户选择,调用thatGraph->setSelectable(false)。可以通过setSelected函数以编程方式修改所选状态。即使禁用了用户的可选择性,也可以通过编程方式更改选择状态。

要取消选中图中的所有对象,请调用QCustomPlot::deselectAll。

2. 所选对象的外观

被选中的对象通常用不同的笔、笔刷或字体显示。其实就是让选择的对象更加突出的显示出来。这可以通过QCPGraph::setSelectedPen, QCPGraph::setSelectedBrush, QCPAxis::setSelectedLabelFont, QCPAxis::setSelectedBasePen, QCPItemText::setSelectedColor等方法进行配置,仅举几例。可以看到,它们的命名与原始(非选中)属性相似,但带有“Selected”前缀。

3. 多部分对象

一些对象(如轴线和图例)具有更复杂的外观,因此用于选择的单个布尔值是不够的。在这些情况下,可选择性和选择状态都是SelectablePart标志的一个或组合(各自的QFlags类型称为SelectableParts)。每个多部件对象定义自己的SelectablePart类型。
在这里插入图片描述

例如,QCPAxis在概念上由三部分组成:带有打勾标记的轴骨干打勾标签(数字)轴标签。由于这三个部分应该是可单独选择的,所以qcpaaxis::SelectablePart定义了qcpaaxis::spNone、qcpaaxis::spAxis、qcpaaxis::spTickLabels和qcpaaxis::spAxisLabel。要使轴骨干和刻度标签可选,但不能使轴标签可选,请调用theAxis->setSelectableParts(qcpaaxis::spAxis|QCP::spTickLabels)。

要控制多部件对象的当前选择状态,请使用qcpaaxis::setSelectedParts方法。

4. 对选择变化做出反应

当选择发生变化时,每个对象都会发出一个名为selectionChanged的信号。无论更改是由用户引起的,还是由调用setSelected/setSelectedParts以编程方式引起的,都无关紧要。

如果绘图中的选择被用户交互改变,则会发出QCustomPlot范围的信号QCustomPlot::selectionChangedByUser。

在连接到该信号的槽函数中,我们可以检查某些对象的选择状态并做出相应的反应。在这里,QCustomPlot::selectedPlottables、selectedItems、selectedax和selectedLegends方法对于检索特定类型的选定对象可能很有用。

四、用户交互信号

QCustomPlot独立于选择机制,在用户交互时发出各种信号。最低级的是QCustomPlot::mouseDoubleClick、mousePress、mouseMove、mouserrelease和mouseWheel信号。当QCustomPlot控件的相应事件触发时,会发出它们。注意,最干净的方法是创建QCustomPlot的子类,并用相同的名称重新实现事件方法(从QWidget 继承)。但是,如果我们不想子类化QCustomPlot,这些信号允许更容易地访问简单任务的用户交互。

还有更高级的信号,用于报告图中某些对象的单击和双击:QCustomPlot::plottableClick、plottableDoubleClick、itemClick、itemDoubleClick、axisClick、axisDoubleClick、legendClick、legendDoubleClick、titleClick和titleDoubleClick。所有这些信号都会报告哪个对象被单击了(如果是多部分对象,还会报告哪个部分),以及相关的QMouseEvent。

相关文章:

  • 学习开发一个RISC-V上的操作系统(汪辰老师) — unrecognized opcode `csrr t0,mhartid‘报错问题
  • 代码随想录算法训练营第42天|动态规划:01背包理论基础、动态规划:01背包理论基础(滚动数组)、416. 分割等和子集
  • OpenGLES:绘制一个混色旋转的3D圆柱
  • java导出word(含图片、表格)
  • FFmpeg:打印音/视频信息(Meta信息)
  • B树和B+树的介绍和对比,以及MySQL为何选择B+树
  • AS环境,版本问题,android开发布局知识
  • ROS2 库包设置和使用 Catch2 进行单元测试
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-2】语言模型,提问范式与 Token
  • 新款UI动态壁纸头像潮图小程序源码
  • Python安装指南:安装Python、配置Python环境(附安装包)
  • 华为云云耀云服务器L实例评测|部署个人音乐流媒体服务器 navidrome
  • AWS Lambda Golang HelloWorld 快速入门
  • Mac上如何修复损坏的音频?试试iZotope RX 10,对音频进行处理,提高音频质量!
  • PsychoPy Coder 心理学实验 斯特鲁普效应
  • 代码随想录Day57、58 | 392.判断子序列 | 115. 不同的子序列 | 583. 两个字符串的删除操作 | 72. 编辑距离
  • 《幸福之路》罗素(读书笔记)
  • 力扣-367.有效的完全平方数
  • Python中取2023, 9, 1——2023, 10, 31的全部时间
  • JAVA面经整理(8)
  • 金科股份:去年营收约275亿元,今年确保所有项目“零烂尾”
  • 太好玩了!坐进大卫·霍克尼的敞篷车穿越他画笔下的四季
  • 中国纪检监察报刊文:要让劳动最光荣成为社会的崇高风尚
  • 马上评|演唱会云集,上海如何把“流量”变“留量”
  • 中央纪委办公厅公开通报3起整治形式主义为基层减负典型问题
  • 伊朗港口爆炸最新情况:14死700多伤,大火延烧,调查困难