QCustomPlot使用
阅读数:126 评论数:0
跳转到新版页面分类
C/C++
正文
一、概述
QCustomPlot 是一个强大的第三方库,用于在 Qt 应用程序中绘制高质量的2D图表。
二、基本使用
1、下载
https://www.qcustomplot.com/index.php/download
将 qcustomplot.h
和 qcustomplot.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();
}