QCustomPlot使用

阅读数:126 评论数:0

跳转到新版页面

分类

C/C++

正文

一、概述

QCustomPlot 是一个强大的第三方库,用于在 Qt 应用程序中绘制高质量的2D图表。

二、基本使用

1、下载

https://www.qcustomplot.com/index.php/download

qcustomplot.hqcustomplot.cpp 文件添加到你的项目中。

2、包含头文件

在你的项目中包含 QCustomPlot 的头文件:

#include "qcustomplot.h"

3、创建并显示曲线图

#include <QApplication>
#include <QMainWindow>
#include "qcustomplot.h"

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    QMainWindow window;

    QCustomPlot *customPlot = new QCustomPlot();
    window.setCentralWidget(customPlot);

    // 创建数据点
    QVector<double> x(101), y(101); // 初始化101个数据点
    for (int i = 0; i < 101; ++i) {
        x[i] = i / 50.0 - 1; // x 值从 -1 到 1
        y[i] = x[i] * x[i];  // y = x^2
    }

    // 创建图形并添加数据
    customPlot->addGraph();
    customPlot->graph(0)->setData(x, y);
    customPlot->xAxis->setLabel("x");
    customPlot->yAxis->setLabel("y");
    customPlot->xAxis->setRange(-1, 1);
    customPlot->yAxis->setRange(0, 1);

    window.resize(800, 600);
    window.show();

    return a.exec();
}

三、绘制实时变动的三相电压曲线图

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void updateData();

private:
    QCustomPlot *customPlot;
    QTimer *dataTimer;
    double time;
};

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), time(0) {
    customPlot = new QCustomPlot(this);
    setCentralWidget(customPlot);

    // 设置图表
    customPlot->addGraph(); // A相电压
    customPlot->graph(0)->setPen(QPen(Qt::red));
    customPlot->addGraph(); // B相电压
    customPlot->graph(1)->setPen(QPen(Qt::green));
    customPlot->addGraph(); // C相电压
    customPlot->graph(2)->setPen(QPen(Qt::blue));

    customPlot->xAxis->setLabel("Time (s)");
    customPlot->yAxis->setLabel("Voltage (V)");
    customPlot->xAxis->setRange(0, 10);
    customPlot->yAxis->setRange(-1.5, 1.5);

    // 设置定时器
    dataTimer = new QTimer(this);
    connect(dataTimer, &QTimer::timeout, this, &MainWindow::updateData);
    dataTimer->start(50); // 每50ms更新一次数据
}

MainWindow::~MainWindow() {
    delete customPlot;
}

void MainWindow::updateData() {
    time += 0.05; // 每次更新增加0.05秒

    // 生成三相电压数据
    double voltageA = sin(time);
    double voltageB = sin(time - 2.0 * M_PI / 3.0);
    double voltageC = sin(time - 4.0 * M_PI / 3.0);

    // 添加数据到图表
    customPlot->graph(0)->addData(time, voltageA);
    customPlot->graph(1)->addData(time, voltageB);
    customPlot->graph(2)->addData(time, voltageC);

    // 移动x轴范围
    customPlot->xAxis->setRange(time, 10, Qt::AlignRight);
    customPlot->replot();
}



相关推荐