#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
QVector<double> xval;//空のベクタ宣言
QVector<double> yval;//空のベクタ宣言
double xyData = 1;
MainWindow::MainWindow(QWidget *parent) :
QwtPlot(parent),
ui(new Ui::MainWindow)
{
//ui->setupUi(this);
xval.append(0);
xval.append(1);
yval.append(0);
yval.append(1);
setTitle( "Plot Demo" );//グラフのタイトル
setTitle("first_plot");
setAxisTitle(QwtPlot::xBottom, " time [Second]");
setAxisScale(QwtPlot::xBottom, 0,100 );
setAxisTitle(QwtPlot::yLeft, "Value");
setAxisScale(QwtPlot::yLeft, 0,100 );
setAutoReplot(true); // データの追記で必要
curve = new QwtPlotCurve();
curve->setPen(QPen(Qt::blue));
curve->setSamples(xval.data(),yval.data(),xval.count());
curve->attach(this);
resize( 600, 400 );
// タイマー
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::update()
{
qDebug() << "hello" << xyData;
xyData += 1;
xval.append(xyData);
yval.append(xyData);
curve->setSamples(xval.data(), yval.data(), xyData+1 );
}
サインカーブでやってみる。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
QVector<double> xval;//空のベクタ宣言
QVector<double> yval;//空のベクタ宣言
int kArraySize = 1000;
//double x[kArraySize] = {}; // x
//double y[kArraySize] = {}; // y
double xData = 0;
MainWindow::MainWindow(QWidget *parent) :
QwtPlot(parent),
ui(new Ui::MainWindow)
{
//ui->setupUi(this);
setTitle( "Plot Demo" );//グラフのタイトル
setTitle("first_plot");
setAxisTitle(QwtPlot::xBottom, " time [Second]");
setAxisScale(QwtPlot::xBottom, 0,1 );
setAxisTitle(QwtPlot::yLeft, "Value");
setAxisScale(QwtPlot::yLeft, -1,1 );
setAutoReplot(true); // データの追記で必要
curve = new QwtPlotCurve();
curve->setPen(QPen(Qt::blue));
//curve->setSamples(xval.data(),yval.data(),xval.count());
curve->attach(this);
resize( 600, 400 );
// タイマー
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(5);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::update()
{
qDebug() << "hello" << xData;
if( xData < 1000 ){
double x = xData/(1000-1.0);
xval.append( x );
yval.append( sin(2.0*M_PI*x) );
curve->setSamples(xval.data(), yval.data(), xData);
xData += 1;
}else{
timer->stop();
}
}
x軸の移動を考えてみる
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <qwt_plot_magnifier.h>
QVector<double> xval;//空のベクタ宣言
QVector<double> yval;//空のベクタ宣言
double xData = 0;
MainWindow::MainWindow(QWidget *parent) :
QwtPlot(parent),
ui(new Ui::MainWindow)
{
//ui->setupUi(this);
setTitle( "Plot Demo" );//グラフのタイトル
setTitle("first_plot");
setAxisTitle(QwtPlot::xBottom, " time [Second]");
setAxisScale(QwtPlot::xBottom, 0,1 ); // x軸
setAxisTitle(QwtPlot::yLeft, "Value");
setAxisScale(QwtPlot::yLeft, -1,1 );
setAutoReplot(true); // データの追記で必要
curve = new QwtPlotCurve();
curve->setPen(QPen(Qt::blue));
curve->attach(this);
QwtPlotMagnifier* magnifier = new QwtPlotMagnifier( canvas());// 拡大縮小
magnifier->setMouseButton(Qt::LeftButton);
resize( 600, 400 );
// タイマー
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(30);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::update()
{
double x = xData/(100-1.0);
xval.append( x );
yval.append( sin(2.0*M_PI*x) );
curve->setSamples(xval.data(), yval.data(), xval.count());
// x軸を移動
if( xval.last() > 1){
setAxisScale(QwtPlot::xBottom, xval.last()-1 ,xval.last() );
}
xData += 1;
}
もっと便利な方法があるかもしれません。


0 件のコメント:
コメントを投稿