7.QCustomPlot 用户互动

用户互动

https://www.qcustomplot.com/index.php/tutorials/userinteractions

QCustomPlot提供多种内置用户交互。它们大致可以归类为

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

操作范围

 

默认方法是,用户在各自的QCPAxisRect上 执行拖动,改变axis范围的。

要在QCustomPlot的widget中启用范围拖动,需要添加QCP::iRangeDrag标志。这可以通过customPlot->setInteraction(QCP::iRangeDrag, true)来实现。这只允许在一个方向上拖动,使用QCPAxisRect::setRangeDrag并指定Qt::Vertical或Qt::Horizontal。默认的ist允许两个方向Qt::Vertical | Qt::Horizontal。

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

若要更改范围的大小,即放大或缩小绘图,用户可使用鼠标滚轮。这个行为是由交互标志QCP::iRangeZoom控制的,它也需要被激活QCustomPlot::setInteraction。就像范围拖动一样,缩放也可以根据受影响的轴和方向进行选择,参见函数QCPAxisRect:: setranezoomaxes和QCPAxisRect:: setranezooom。此外,结垢强度可以通过QCPAxisRect:: setranezoomfactor来控制。在普通的鼠标硬件上,一个鼠标滚轮步长对应于应用于轴范围的这个因子。如果因子大于1,向前滚动鼠标滚轮会减小范围(放大),向后滚动则会增大范围(缩小)。要扭转这种行为,请将鼠标滚轮缩放因子设置为小于1(但大于0)。缩放总是围绕当前鼠标光标在情节中的位置。这意味着将光标指向感兴趣的功能,滚动鼠标滚轮可以放大到该功能。

选择机制

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

为了允许同时选择多个对象,设置QCP:: multitiselect交互标志。然后用户可以通过持有multi-select-modifier(参见QCustomPlot::setMultiSelectModifier)来连续选择多个对象,默认情况下是Ctrl。

控制个体可选性和选择状态

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

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

所选对象外观

选择的对象通常用不同的钢笔、笔刷或字体显示。这可以配置方法像QCPGraph::setSelectedPen, QCPGraph::setSelectedBrush, QCPAxis::setSelectedLabelFont, QCPAxis::setSelectedBasePen, QCPItemText::setSelectedColor,只是举几个例子。可以看到,它们的名称与原始(非选中)属性类似,但前缀为“Selected”。

多部分对象

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

例如,QCPAxis在概念上由三部分组成:带有tick标记的axis骨干、tick标签(数字)和axis标签。由于这三个部分应该是单独可选的,所以QCPAxis::spNone、QCPAxis::spAxis、QCPAxis::spTickLabels和QCPAxis::spAxisLabel定义了QCPAxis::spNone、QCPAxis::spAxisLabel。为了使axis骨干和tick标签可选,但不是axis标签,调用axis ->setSelectableParts(QCPAxis::spAxis|QCP::spTickLabels)。若要控制多部分对象的当前选择状态,请使用

 

 

对选择更改做出反应

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

如果通过用户交互更改了图中的选择,则将QCustomPlot::selectionChangedByUser发出QCustomPlot范围内的信号。在与此信号连接的插槽中,您可以检查某些对象的选择状态并做出相应的反应。该方法,,和可检索某一种的选择的对象在这里是有用的。QCustomPlot::selectedPlottablesselectedItemsselectedAxesselectedLegends

用户互动信号

选择机制无关,QCustomPlot在用户交互时发出各种信号。最低级别的人是QCustomPlot::mouseDoubleClickmousePressmouseMovemouseRelease,和mouseWheel信号。当QCustomPlot小部件的相应事件触发时,将发出它们。请注意,最干净的方法是将QCustomPlot子类化并重新实现具有相同名称的事件方法(从QWidget继承)。但是,如果您不想将QCustomPlot子类化,则这些信号可以更轻松地访问用于简单任务的用户交互。

也有一些更高级别的信号,该报告的点击和特定对象的doubleclicks中的情节:QCustomPlot::plottableClickplottableDoubleClickitemClickitemDoubleClickaxisClickaxisDoubleClicklegendClicklegendDoubleClicktitleClick,和titleDoubleClick。所有这些信号都报告单击了哪个对象(如果是多部分对象,则单击了哪个部分),以及相关的QMouseEvent。

完整软件包中的示例包括一个项目,该项目广泛使用了交互系统的各个方面。它还演示了如何微调行为以适应需求。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值