qcustomplot 游标吸附_QCustomplot使用分享(九) 绘制图表-多功能游标

本文介绍了QCustomplot控件中游标的优化,提供单游标、双游标及锁定移动等功能,并展示了如何通过接口设置游标颜色和获取区间值。通过实例代码演示了游标的添加、移动和监测,适用于需要在图形上进行精确测量和分析的场景。
摘要由CSDN通过智能技术生成

一、概述

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

二、效果图

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

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

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

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

多种类游标,单游标,双游标

游标显示、隐藏,支持移动

双游标锁定移动,非锁定移动

获取游标区间值

设置游标颜色

获取游标区间数据

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

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

构造ESCvsDBOperater类,并加载cvs文件

通过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 & 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不仅仅能显示折线图,他还可以显示各种各样的效果图,感兴趣的到QCustomplot使用分享(一) 能做什么事文章中观看

三、源码讲解

1、源码结构

如图所示,是工程的头文件截图,图中的文件数量比较多,但是对外我们使用的可能只是一个ESMPMultiPlot类,这个类中提供了很多接口,足够我们使用,当然了如果有特殊需求的话,可以进行提供定制

2、头文件

如下是头文件中的接口,我只是把相关的Public接口列出来了,而这些接口也正好是我们平时使用比较多的接口,看接口名称应该都知道接口是干什么的,因此不再细说

void ClearCache();//清空上一个csv绘图数据

void SetGraphCount(int);//设置折线图个数

void SetGraphKey(const QVector &);//设置x轴数据

void SetGraphKeyRange(double, double);//设置x轴范围,即时间范围

void SetGraphScatterStyle(int, int);//设置折线图样式

void SetGraphValue(int, const QString &, const QString &

, const QVector &);//设置折线图数据

void AppendGraphValue(int, double, double);//追加折线图数据

void AppendGraphValue(int, const QVector &, const QVector &);//追加折线图数据

QVector GetGraphValues(int, int);//获取折线图 游标区间值 参数1:折线下标 参数2:游标order

QString GetGraphName(int) const;

void SetGraphColor(int, const QColor &);//设置折线图颜色

QColor GetGraphColor(int);//获取折线图颜色

void SetSingleCursor(bool single);//启动单游标

bool IsSingleCursor(int index) const;//测试游标是否是单游标

void ShowCursor(bool visible = true);//设置游标是否显示

void AppendCursor(const QColor & color);//新增游标

void LockedCursor(int, bool);//锁定指定游标 参数2表示是否锁定

int CursorCount() const;

bool CursorVisible() const;//游标是否显示

void SetCursorColor(int index, const QColor &);//设置游标颜色 第二个参数指示哪个游标

double GetCursorKey(bool);//获取游标对象x轴值 true表示左游标 false表示右游标

double GetCursorKey(int index, bool);//获取游标对象x轴值 true表示左游标 false表示右游标

void ResizeKeyRange(bool, int index = 0);//设置x轴缩放 true时按游标缩放 false时恢复默认状态

void ResizeValueRange();//y轴自适应

void ConfigureGraph();//设置

void ConfigureGraphAmplitude(int);//双击右侧单位时触发

void SavePng(const QString & = &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值