继承重写了qcostomplot原有布局样式,添加了部分自定义功能函数。
补充多个Y轴轴线始终保持对齐的方法:
// 创建一个外边距组,使组内成员有相同的外边距
QCPMarginGroup *marginGroup = new QCPMarginGroup(this); // this == QCustomPlot, 我这继承的QCustomPlot
// 新建一个坐标系
QCPAxisRect* Rect = new QCPAxisRect(this, true);
//! 设置外边距组,将要对齐的坐标系都设置外边距组,所有成员都将保持相同的外边距
Rect->setMarginGroup(QCP::msLeft | QCP::MarginSide::msRight, marginGroup);
#ifndef QTTCUSTOMPLOT_H
#define QTTCUSTOMPLOT_H
#include <QObject>
#include "qcustomplot.h"
class QttCustomPlot : public QCustomPlot
{
Q_OBJECT
public:
explicit QttCustomPlot(int count);
//! legend
void setLegendVisible(bool on);
//!
void addRect(int idx);
//!
void removeRect(int idx);
//!
void hideAxis(int rectId, QCPAxis::AxisType type, bool on = false);
//!
void hideAxises(bool on = false);
//!
QCPGraph* getGraph(int RectId, int GraphId);
//!
void addData(int RectId, int GraphId, double x, double y);
//!
void addData(int RectId, int GraphId, QVector<double> x, QVector<double> y);
//!
void addData(QCPGraph* graph, double x, double y);
//!
void addData(QCPGraph* graph, QVector<double> x, QVector<double> y);
//!
void clearData(int RectId, int GraphId);
//!
void clearData(QCPGraph* graph);
//!
void setAutoScroll(bool on);
//!
void connectAllxAsix(bool on);
//!
void setGraphColor(QCPGraph* pGraph);
signals:
private slots:
void when_selectionChangedByUser();
void when_legendDoubleClick(QCPLegend*, QCPAbstractLegendItem*, QMouseEvent*);
private:
//
int rCount;
//
QList<QCPAxisRect *> RectList;
//
bool AxisHide;
// 隐藏legend及其所在布局LegendLayoutGrid
bool legendVisible;
//
QCPLayoutGrid* plotLayoutGrid;
QCPLayoutGrid* legendLayoutGrid;
//
QCPLegend* legend;
//
bool isAutoScroll;
//!
void init_customplot();
//!
void init_LayoutGrid();
//!
void init_Rect();
//!
void init_legend();
//!
void qreplot();
//!
void autoScroll();
};
#endif // QTTCUSTOMPLOT_H
功能如下:
- 动态添加坐标系
- 隐藏指定轴
- 多个坐标系X轴同步
- legend
- 双击曲线修改颜色
- 暂时只支持一个坐标系一条曲线(可以添加多条曲线,但是无法指定删除某一条曲线,所以在删除曲线图层时容易出现问题)
效果如图: