这里在QML中使用QCustomPlot是定义一个继承自QQuickPaintedItem的类,它包含一个QCustomPlot对象,在paint函数中将这个对象转化为pixmap绘制到布局中显示。
在QML中使用QT的Widget控件也可以借鉴这个思路实现
顺便记录一下QCustomPlot的简单设置与使用。
QCustomPlot可以直接到官网下载源码。
main.cpp中添加代码,将C++类注册为QML组件
#include "plot/liquidheightplot.h"
...
int main(int argc, char *argv[])
{
...
qmlRegisterType<LiquidHeightPlot>("LiquidHeightPlot", 1, 0, "LiquidHeightPlot");
...
}
类定义liquidheightplot.h
#ifndef LIQUIDHEIGHTPLOT_H
#define LIQUIDHEIGHTPLOT_H
#include "qcustomplot/qcustomplot.h"
#include <QQuickItem>
#include <QQuickPaintedItem>
#include <QVector>
#include <QJsonObject>
class LiquidHeightPlot : public QQuickPaintedItem
{
Q_OBJECT
public:
explicit LiquidHeightPlot(QQuickItem *parent = nullptr);
~LiquidHeightPlot();
//更新实时数据
Q_INVOKABLE void updateRealData(double value);
//设置历史数据
Q_INVOKABLE void setHistoryData(QJsonObject data);
//清除数据
Q_INVOKABLE void clearData();
signals:
void sigIllegalData();
private:
virtual void paint(QPainter *painter);
private:
QCustomPlot *m_customPlot;
double m_maxY;
QVector<double> m_x1;
QVector<double> m_y1;
};
#endif // LIQUIDHEIGHTPLOT_H
类实现liquidheightplot.cpp
#include "liquidheightplot.h"
#include <QDateTime>
#include <QStringList>
LiquidHeightPlot::