【QT】】qcustomplot的使用

发布于:2025-03-16 ⋅ 阅读:(102) ⋅ 点赞:(0)

1.下载并添加qcustomplot.c和qcustomplot.h文件

在这里插入图片描述
拖动一个Widget,提升为qcustomplot
在这里插入图片描述
在这里插入图片描述
成功后是这样的,
在这里插入图片描述
改第三行:greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport 编译,不报错,出现带坐标轴的界面,成功
在这里插入图片描述

2.生成曲线

mainwindow.h增加定时器等等

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qcustomplot.h"  // 引入QCustomPlot头文件

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
    QCustomPlot *customPlot; // 添加QCustomPlot指针

    QTimer *dataTimer; // 定时器
    QVector<double> xData, yData; // 数据存储
    void updatePlot(); // 更新图表的函数
};

#endif // MAINWINDOW_H

main函数增加曲线等

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
void MainWindow::updatePlot()
{
    // 生成新的数据点
    static double time = 0;
    static double signalValue = 0;

    // 生成新信号值(如正弦波)
    signalValue = qSin(time);
    time += 0.1;

    // 保存数据
    xData.append(time);
    yData.append(signalValue);

    // 更新图表
    customPlot->graph(0)->setData(xData, yData);
    customPlot->xAxis->setRange(time, 10, Qt::AlignRight); // X轴范围保持在最新10秒内
    customPlot->replot(); // 刷新图表
}

mianwindow.c添加曲线属性以及定时器参数等

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QVector>
#include <cmath> // 使用数学函数

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 初始化QCustomPlot
    customPlot = new QCustomPlot(this);
    setCentralWidget(customPlot);

    // 配置图表
    customPlot->addGraph();
    customPlot->graph(0)->setPen(QPen(Qt::blue)); // 设置曲线颜色
    customPlot->xAxis->setLabel("Time (s)");
    customPlot->yAxis->setLabel("Signal Value");

    // 启用自动缩放
    customPlot->xAxis->setRange(0, 10);
    customPlot->yAxis->setRange(-1, 1);

    // 初始化定时器
    dataTimer = new QTimer(this);
    connect(dataTimer, &QTimer::timeout, this, &MainWindow::updatePlot);
    dataTimer->start(100); // 每100毫秒更新一次

    // 初始化数据
    xData.clear();
    yData.clear();
}
MainWindow::~MainWindow()
{
    delete ui;
}


效果:动态正选曲线
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到