QtダイナミックカーブをQwtで描画


これは簡単なまとめで、問題があれば、伝言を歓迎します.
効果図:
Qt 利用 Qwt 绘制动态曲线_第1张图片
描画前の準備
.QWt推奨リファレンスブログの構成http://blog.csdn.net/zhuyunfei/article/details/51008228しんそく有効
ドラフト関数
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void setupRealtimeDataDemo(QwtPlot *qwtplot);

private:
    Ui::MainWindow *ui;
    QVector xdata;
    QVector ydata;
    QTimer updateTimer;
    QString demoName;
    QwtPlotCurve *curve ;
    double getData(double inteval);

private slots:
    void updatedataSlot();
};

#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);
    setupRealtimeDataDemo(ui->qwtPlot);
}



MainWindow::~MainWindow()
{
    delete ui;
}



void MainWindow::setupRealtimeDataDemo(QwtPlot *qwtplot)
{


    //   xdata,x     5   ,y    0
    for(int i=1;i<5001;i++){
        xdata.append(double(i)/1000-5);
        ydata.append(0);
    }

    demoName = "Real Time Data Demo";
    qwtplot->setTitle(demoName);
    qwtplot->setCanvasBackground(Qt::gray);//  
    qwtplot->insertLegend(new QwtLegend(),QwtPlot::RightLegend);//  

    curve = new QwtPlotCurve();
    curve->setTitle("    ");//    
    curve->setPen( Qt::yellow, 1 );//        ;

    QTime curtime;
    curtime=curtime.currentTime();
    qwtplot->setAxisTitle(QwtPlot::xBottom, " System Uptime");
    qwtplot->setAxisTitle(QwtPlot::yLeft,"EMG");
    qwtplot->setAxisScale(QwtPlot::yLeft,-2,2,1);
    qwtplot->setAxisScale(QwtPlot::xBottom,-5,0,1);



    QwtPlotZoomer *zoomer = new QwtPlotZoomer( qwtplot->canvas() );
    zoomer->setRubberBandPen( QColor( Qt::blue ) );
    zoomer->setTrackerPen( QColor( Qt::black ) );
    zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::RightButton, Qt::ControlModifier );
    zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::RightButton );
    QwtPlotMagnifier *magnifier = new QwtPlotMagnifier( qwtplot->canvas() );                 //                     

    //    magnifier->setMouseButton(Qt::LeftButton);     //                     (      )              

    QwtPlotGrid *grid = new QwtPlotGrid();
    grid->enableX( true );//     
    grid->enableY( true );
    grid->setMajorPen( Qt::black, 0, Qt::DotLine );
    grid->attach(qwtplot);

    connect(&updateTimer,SIGNAL(timeout()),this,SLOT(updatedataSlot()));
    updateTimer.start(0);


}


/**
 * @brief getData
 * @param inteval
 * @return
 *                 
 */
double MainWindow::getData(double time){

    double s = qCos( time * M_PI * 2 ) ;
    return s;
}


//    ydata,      read  
void MainWindow::updatedataSlot(){
    static QTime dataTime(QTime::currentTime());
    long int eltime = dataTime.elapsed();
    static int lastpointtime = 0;

    int size = (eltime - lastpointtime);


    if(size>0){//     
        ydata.erase(ydata.begin(),ydata.begin()+size);//       
        for(int i=1;isetSamples(xdata,ydata);
    curve->attach(ui->qwtPlot);
    ui->qwtPlot->replot();

    static double lastFpsKey;
    static int frameCount;
    ++frameCount;
    double fpstime = (double)eltime/1000.0-lastFpsKey;
    if ( fpstime> 2) // average fps over 2 seconds
    {
        ui->statusBar->showMessage(
                    QString("%1 FPS")
                    .arg(frameCount/fpstime, 0, 'f', 0)
                    , 0);
        lastFpsKey = (double)eltime/1000.0;
        frameCount = 0;
    }
}








わからないところがあったらメッセージを!