qwt绘制动态折线图
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qwt_plot_curve.h"
#include <QTimer>
#include <QTime>
#include <QPainter>
#include <qwt_legend.h>
#include "qwt_plot_item.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QwtPlotCurve *curve=new QwtPlotCurve("x-y");
QwtPlotCurve *curve1=new QwtPlotCurve("a-b");
double val[10]={3,5,8,6,2,8,6,9,1,5};
double time[10]={0,1,2,3,4,5,6,7,8,9};
double time1[20]={0};
double val1[20]={0};
QwtLegend *legend=new QwtLegend;
void timerEvent(QTimerEvent *event);
private slots:
void legendChecked( const QVariant &itemInfo, bool on );
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
curve->setSamples(time,val,9);
curve->attach(ui->qwtPlot);
curve->setPen(QColor(Qt::red),1);
this->startTimer(1000);
legend->setDefaultItemMode(QwtLegendData::Checkable);
ui->qwtPlot->insertLegend(legend);
connect( legend, SIGNAL( checked( const QVariant &, bool, int ) ),
SLOT( legendChecked( const QVariant &, bool ) ) );
for(int i=1;i<20;i++)
{
time1[i]=time1[i-1]+0.5;
}
for(int i=0;i<20;i++)
{
val1[i]=qrand()%10;
}
//curve1 ->setSamples(time1,val1,10);
//curve1->attach(ui->qwtPlot);
}
MainWindow::~MainWindow()
{
delete ui;
}
/*void MainWindow::timerEvent(QTimerEvent *event)
{
for(int i=0;i<19;i++)
{
val1[i]=val1[i+1];
time1[i]=time1[i+1];
}
time1[19]+=0.5;
qsrand(QTime::currentTime().msec());
val1[19]=qrand()%10;
curve1->setSamples(time1,val1,9);
curve1->attach(ui->qwtPlot);
ui->qwtPlot->replot();
}*/
void MainWindow::timerEvent(QTimerEvent *event)
{
for(int i=0;i<9;i++)
{
val[i]=val[i+1];
time[i]=time[i+1];
}
time[9]+=1;
qsrand(QTime::currentTime().second());
val[9]=qrand()%10-5;
curve->setSamples(time,val,9);
curve->attach(ui->qwtPlot);
ui->qwtPlot->replot();
}
void MainWindow::legendChecked(const QVariant &itemInfo, bool on)
{
QwtPlotItem *item=ui->qwtPlot->infoToItem(itemInfo);
if(item)
{
item->setVisible(on);
}
ui->qwtPlot->replot();
}
运行结果