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

本文详细介绍了QCustomplot控件中游标的优化和增强,包括单游标、双游标以及锁定移动等功能。通过源码解析,展示了如何添加、移动游标以及处理游标移动的逻辑。此外,还提供了测试代码和相关文章链接,帮助读者深入理解和应用QCustomplot的游标功能。
摘要由CSDN通过智能技术生成

QCustomplot使用分享(九) 绘制图表-多功能游标

目录

一、概述

二、效果图

三、源码讲解1、源码结构

2、头文件

3、添加游标

4、监测移动

5、移动游标

6、其他函数

四、测试方式1、测试工程

2、测试文件

3、测试代码

五、相关文章

六、总结

七、关于美化

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

一、概述

上一篇文章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时按游标缩放 fa

C知道: CSDN 上有一个名为 "QCustomPlot" 的开源库,它提供了丰富的图表绘制功能,包括游标功能。 QCustomPlot游标功能允许用户在图表上添加一个或多个垂直或水平的游标线,并根据鼠标位置实时更新游标的位置。这对于在图表上标记特定数据点或跟踪鼠标位置非常有用。 要使用 QCustomPlot游标功能,你需要完成以下步骤: 1. 在你的项目中添加 QCustomPlot 库。你可以从 CSDN 或 QCustomPlot 官方网站下载最新版本的库文件。 2. 在你的代码中创建一个 QCustomPlot 的实例: ```cpp QCustomPlot *plot = new QCustomPlot(this); ``` 3. 添加游标线到图表中。你可以使用 `addGraph` 函数创建一个游标线,并设置其属性,如颜色和线型: ```cpp QCPItemStraightLine *cursor = new QCPItemStraightLine(plot); cursor->setPen(QPen(Qt::red)); ``` 4. 在需要更新游标位置的事件中,如鼠标移动事件,通过设置游标线的位置来实时更新游标位置: ```cpp void YourWidget::mouseMoveEvent(QMouseEvent *event) { // 获取鼠标在图表上的坐标 QPointF mousePoint = plot->mapFromGlobal(event->globalPos()); // 设置游标线的位置 cursor->point1->setCoords(mousePoint.x(), plot->yAxis->range().lower); cursor->point2->setCoords(mousePoint.x(), plot->yAxis->range().upper); // 更新图表 plot->replot(); } ``` 这样,你就可以在 QCustomPlot 图表上实现游标功能了。记得根据你的需求,调整游标的样式和行为。希望这能帮到你!如果你还有其他问题,请随时继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值