qt跟随鼠标动态绘制_采用Qt绘制多条曲线,跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)...

本文介绍了如何利用Qt的开源绘图库QCustomPlot来绘制多条曲线,并实现鼠标跟随显示线上点的值。通过自定义XxwTracer和XxwTraceLine类,可以实现在图表中显示鼠标位置的x、y值以及绘制水平和垂直的虚线。此外,还提供了自定义的图表类XCustomPlot,允许在鼠标移动时动态显示曲线上点的值。
摘要由CSDN通过智能技术生成

采用Qt绘制多条曲线,跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)

QCustomPlot是一个开源的基于Qt的第三方绘图库,能够绘制漂亮的2D图形。

QCustomPlot的官方网址:https://www.qcustomplot.com/

从官网下载QCustomPlot的源文件,包括qcustomplot.h和qcustomplot.cpp。

1. 自定义鼠标显示跟随类XxwTracer和XxwTraceLine:

XxwTracer用于在图表中显示鼠标所在位置的x,y值

XxwTraceLine用于在图中显示水平或垂直的虚线

头文件XxwTracer.h

#ifndef MYTRACER_H

#define MYTRACER_H

#include

#include "qcustomplot.h"

///

/// \brief The XxwTracer class:在图表中显示鼠标所在位置的x,y值的追踪显示器

///

class XxwTracer : public QObject

{

Q_OBJECT

public:

enum TracerType

{

XAxisTracer,//依附在x轴上显示x值

YAxisTracer,//依附在y轴上显示y值

DataTracer//在图中显示x,y值

};

explicit XxwTracer(QCustomPlot *_plot, TracerType _type, QObject *parent = Q_NULLPTR);

~XxwTracer();

void setPen(const QPen &pen);

void setBrush(const QBrush &brush);

void setText(const QString &text);

void setLabelPen(const QPen &pen);

void updatePosition(double xValue, double yValue);

void setVisible(bool m_visible);

protected:

bool m_visible;//是否可见

TracerType m_type;//类型

QCustomPlot *m_plot;//图表

QCPItemTracer *m_tracer;//跟踪的点

QCPItemText *m_label;//显示的数值

QCPItemLine *m_arrow;//箭头

};

///

/// \brief The XxwCrossLine class:用于显示鼠标移动过程中的鼠标位置的直线

///

class XxwTraceLine : public QObject

{

public:

enum LineType

{

VerticalLine,//垂直线

HorizonLine, //水平线

Both//同时显示水平和垂直线

};

explicit XxwTraceLine(QCustomPlot *_plot, LineType _type = VerticalLine, QObject *parent = Q_NULLPTR);

~XxwTraceLine();

void initLine();

void updatePosition(double xValue, double yValue);

void setVisible(bool vis)

{

if(m_lineV)

m_lineV->setVisible(vis);

if(m_lineH)

m_lineH->setVisible(vis);

}

protected:

bool m_visible;//是否可见

LineType m_type;//类型

QCustomPlot *m_plot;//图表

QCPItemStraightLine *m_lineV; //垂直线

QCPItemStraightLine *m_lineH; //水平线

};

#endif // MYTRACER_H

源文件MyTracer.cpp

#include "MyTracer.h"

XxwTracer::XxwTracer(QCustomPlot *_plot, TracerType _type, QObject *parent)

: QObject(parent),

m_plot(_plot),

m_type(_type)

{

m_visible = true;

m_tracer = Q_NULLPTR;// 跟踪的点

m_label = Q_NULLPTR;// 显示的数值

m_arrow = Q_NULLPTR;// 箭头

if (m_plot)

{

QColor clrDefault(Qt::red);

QBrush brushDefault(Qt::NoBrush);

QPen penDefault(clrDefault);

// penDefault.setBrush(brushDefault);

penDefault.setWidthF(0.5);

m_tracer = new QCPItemTracer(m_plot);

m_tracer->setStyle(QCPItemTracer::tsCircle);

m_tracer->setPen(penDefault);

m_tracer->setBrush(brushDefault);

m_label = new QCPItemText(m_plot);

m_label->setLayer("overlay");

m_label->setClipToAxisRect(false);

m_label->setPadding(QMargins(5, 5, 5, 5));

m_label->setBrush(brushDefault);

m_label

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值