qcustomplot单游标在多个坐标系中切换

1. 多坐标系—单个游标—游标在多个坐标系切换

在某些场景下,需要动态的添加多个坐标系,而游标只能在一个坐标系中显示,这时就需要将游标从默认的坐标系切换到指定坐标系,实现很简单,就不贴图了。代码如下:

tracer->setClipAxisRect(Rect);  //! QCPItemTracer*   QCPAxisRect*
tracerLabel->setClipAxisRect(Rect);  //! QCPItemText*

2.多坐标系—单个游标—游标贯穿多个坐标系

我的另一篇文章有过大概介绍,但是存在一些bug和一些繁琐的逻辑,最近做了些优化,有时间再更新下,这里大概描述下思路:

  1. 继承qcustomplot(可以不继承,根据自己需要,单纯为了方便)
  2. 创建 游标QCPItemTracer* 和 游标标签QCPItemText*,不绑定图层group,运行时编译器会输出:
    virtual QPointF QCPItemPosition::pixelPosition() const Item position type x is ptPlotCoords, but no axes were defined
    这是由于未绑定图层导致的,不影响运行。
  3. qcustomplot 提供了一个默认的图层,将图层样式改成需要的样式(为了好看,根据需要添加这一步)
  4. 添加图层,最重要部分,在首次添加图层时删除默认图层,一定是将第一个图层添加到plotLayout()中后再删除默认图层(plotLayout() 也就是 m_plot->plotLayout()); 删除坐标系用remove(),会将对象delete并nullptr;
  5. 隐藏不需要的轴
  6. 关联各个图层的X轴,每添加一个坐标系,就与已有的坐标系建立connect(…),注意双向建立;删除坐标系前与其他的坐标系双向disconnect(个人需要)
  7. QCPLegend ,下图右上角部件,legend是默认添加在qcustomplot默认的坐标系的insertLayout()对象里,而默认坐标系会在添加第一个坐标系后被删除,而在删除默认坐标系的同时,legend将被delete为nullptr;所以在添第一个坐标系的时候将legend添加到指定的坐标系 , 注意:此处的第一个坐标系与之前的不同,指的是除默认的自带的坐标系,每次向qcustomplot中添加的坐标系是其中第一个坐标系
    在我们删除坐标系时,注意删除的坐标系是否是绑定了legend的坐标系,如果是 ,用take(),该函数只会将legend从布局中移出,并不会delete,然后再删除坐标系,并将legend放入其他坐标系。
  8. QCustomPlot::mouseMove QCustomPlot::mousePress QCustomPlot::mouseRelease QCustomPlot::selectionChangedByUser QCustomPlot::legendDoubleClick等信号操作就不做赘述了

qcustomplot单游标在多个坐标系中切换_第1张图片

3. 多坐标系—多个游标—一一对应

这个网上案例很多,就不做叙述了

你可能感兴趣的:(qcustomplot,qt)