使用QCustomPlot创建带游标测量的Plot

       QCustomePlot是一个可跨平台应用的开源库,可以创建自定义的Plot;而且集成简单,只需要在项目中加入头文件qcustomplot.hqcustomplot.cpp文件,然后使一个widget提升为QCustomPlot类,即可使用。

本实例应用是使用此开源库创建带游标测量的Plot.

先上效果图

创建一个自定义plot类,继承自QCustomPlot.

#ifndef MULTICURVESPLOT_H
#define MULTICURVESPLOT_H

#include <QObject>
#include "qcustomplot.h"
#include <QMouseEvent>
#include <QMap>
#include "qDebug.h"
typedef struct _CurveData
{
    QVector<double> keyVec;//x
    QVector<double> valVec;//y
}CurveData;//单个曲线的数据


/*
注意:调用任何函数前,必须先已经通过init函数初始化过支持的曲线数目,送入数据源的指针
为什么不直接在构造中
*/
class MultiCurvesPlot : public QCustomPlot
{
    Q_OBJECT
public:
    /*传入的_allCurvesData必须是有size的*/
    MultiCurvesPlot(int _curvesCnt, QWidget *parent = 0);
    ~MultiCurvesPlot(){qDebug() << "delete MultiCurvesPlot";}

    void setCurvesName(QVector<QString> _nameVec);
    void addData(int curveIdx, double x, double y);
    void setAutoScroll(bool enable){autoScroll = enable;}
    void setDiffSolveEnable(bool enable);
    void setColors(QVector<QColor> _colors);
    void setMainPlot(QCustomPlot *_mainPlot);
    void setTracerEnable(bool enable);//是否使能游标
    void setScatterPointEnable(bool enable);//是否使能散点
    const QVector<CurveData> *getAllData(void) const;
    QString getCurveName(int idx);

public slots:
    void setCurveName(int idx, const QString newName);
    void showCurves(QList<uint16_t> _idxList);
    void storeAxisScope(bool x, bool y);//保存轴的范围
    void resumeAxisScope(bool x, bool y);//恢复轴的范围

signals:
    void noniusValueChanged(int _curveIdx, QString val);//游标值变化了



protected:
    void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;

    virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    virtual void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

//    virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
//    virtual void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;

private slots:
    void clearAllData();
    void when_selectionChangedByUser();
    //void when_itemDoubleClick (QCPAbstractItem *item, QMouseEvent *event){qDebug() << item;}
    void when_legendDoubleClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event);


private:
    //QCPGraph* getGraph(int curveIdx);

    MultiCu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

previewer1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值