目录

原文链接:QCustomplot使用分享(九) 绘制图表-多功能游标

一、概述

上一篇文章QCustomplot使用分享(八) 层(完结)讲述了第一篇QCustomPlot控件的使用,主要是展示了多维度折线图,并且有一个简单的游标展示效果。本篇文章是在上一篇文章的基础上进行的功能加强,主要是针对游标进行优化,提供更加丰富的游标功能。

二、效果图

如下图所示,是我做的一个测试效果图,途中包括一个简单的折线图和一系列游标,折线图的显示模式有十几种效果,具体可以看QCustomplot使用分享(一) 能做什么事这篇文章里的截图,这里我就不在贴出。

这个效果图主要展示了游标的使用,其他相关功能可以参考之前写的文章,本篇文章最后也会通过相关文章小节提供,感兴趣的同学可以去文末查找。

演示demo中的数据是读取于cvs文件,如果大家自己想从其他渠道获取数据也可以,这个绘图控件已经添加了足够的接口可供调用。

绘图控件提供的游标功能如下,比如:

  1. 多种类游标,单游标,双游标
  2. 游标显示、隐藏,支持移动
  3. 双游标锁定移动,非锁定移动
  4. 获取游标区间值
  5. 设置游标颜色
  6. 获取游标区间数据

下面的文章中我会分析下主要的接口和核心功能实现

图中的展示效果测试代码如下,代码中的关键节点就2个

  1. 构造ESCvsDBOperater类,并加载cvs文件
  2. 通过Set接口设置数据,并设置折线图类型
ESCsvDBOperater * csvDBOperater = new ESCsvDBOperater(nullptr); csvDBOperater->loadCSVFile(qApp->applicationDirPath() + "\\temp\\test31.csv"); QStringList names = csvDBOperater->getCSVNames(); auto callback = [this, names](const QString & name, const QVector<double> & data){     int index = names.indexOf(name);     if (index != -1)     {         if (index == 0)         {             ui->widget->SetGraphKey(data);         }         else         {             int l = name.indexOf("(");             int r = name.indexOf(")");             if (l != -1 && r != -1)             {                 ui->widget->SetGraphValue(index - 1, name.left(l), /*name.mid(l + 1, r - l - 1)*/"", data);                 ui->widget->SetGraphScatterStyle(index - 1, 4);             }             else             {                 ui->widget->SetGraphValue(index - 1, name, "", data);             }         }     }

当然QCP不仅仅能显示折线图,他还可以显示各种各样的效果图,感兴趣的到