天天看点

Qt QCustomerPlot实时动态曲线

1.新建工程,添加QCustomer.h 和QCustomer.cpp源文件。

 MainWindow.h的头文件

#include <QMainWindow>

#include <QTimer>

class Dialog;

namespace Ui {

class MainWindow;

}

class MainWindow : public QMainWindow

{

    Q_OBJECT   

public:

    explicit MainWindow(QWidget *parent = 0);

    ~MainWindow();

private:

    Ui::MainWindow *ui;

    QTimer *timer2;

    Dialog *dlog1;

private slots:

    void updateplot();

};

#endif // MAINWINDOW_H

MainWindow.cpp的源文件

#include "mainwindow.h"

#include "dialog.h"

#include "ui_mainwindow.h"

#include "qcustomplot.h"

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    Dialog *dlog1=new Dialog(this);  //设置参数更新

    ui->plot->addGraph();

    ui->plot->graph(0)->setPen(QPen(Qt::red));

    ui->plot->graph(0)->setBrush(QBrush(QColor(0,0,255,20)));

    ui->plot->xAxis2->setVisible(true);

    ui->plot->yAxis2->setVisible(true);

    ui->plot->xAxis->setLabel("time");

    ui->plot->yAxis->setLabel("Value");

    ui->plot->axisRect()->setupFullAxesBox();

    ui->plot->yAxis->setRange(-1.2,1.2);

    QTimer *timer2=new QTimer(this);

    connect(timer2,SIGNAL(timeout()),this,SLOT(updateplot()));

    connect(ui->plot->xAxis,SIGNAL(rangeChanged(QCPRange)),ui->plot->xAxis2,SLOT(setRange(QCPRange)));  //设置自动更新

    connect(ui->plot->yAxis,SIGNAL(rangeChanged(QCPRange)),ui->plot->yAxis2,SLOT(setRange(QCPRange)));   //设置自动更新

    timer2->start(100);

}

MainWindow::~MainWindow()

{

    delete ui;

}

void MainWindow::updateplot()

{

    ui->label_3->setText(QObject::tr("Time=%1").arg(Dialog::i));

    ui->label->setText(QObject::tr("A=%1").arg(Dialog::a));

    ui->label_2->setText(QObject::tr("B=%1").arg(Dialog::b));

    ui->plot->graph(0)->addData(Dialog::i,Dialog::b);

    ui->plot->xAxis->setRange(Dialog::i,360,Qt::AlignRight);   //设置坐标轴更新样式

    ui->plot->replot();

}