6 votes

C++ Qwt - Tracer des données à partir d'un vecteur

J'essaie de tracer un graphique basé sur des données que j'ai obtenues et stockées dans un vecteur, mais je n'arrive pas à trouver de tutoriels ou de références qui me donnent des indications sur ce que je dois faire. Voici donc mon code :

class Plotter : public QwtPlot 
{

   public:

    Plotter() {

    }
};

int main( int argc, char **argv )
{

   QApplication app(argc, argv);

   //Plotter *d_plot = new Plotter();

    Plotter* d_plot = new Plotter();

   d_plot->setTitle("DEMO");
   d_plot->setCanvasBackground(Qt::white);
   d_plot->setAxisScale( QwtPlot::yLeft, 0.1, 50.0 );
   d_plot->setAxisScale(QwtPlot::yRight, 0.1, 50.00);

   // PLOT THE DATA
   std::vector<double> data;
   data.push_back(1.03);
   data.push_back(13.12);
   //....

   d_plot->resize( 600, 400 );
   d_plot->show();

   return app.exec();
}

Quelqu'un pourrait-il me donner une idée de la fonction que je pourrais utiliser pour me permettre de tracer les données ?

Remerciements

7voto

stijn Points 13405

Consultez la documentation de QwtPlot : normalement, vous créez un fichier QwtPlotCurve , utiliser QwtPlotCurve::setSamples pour obtenir les données qu'il contient QwtPlotCurve::attach pour obtenir les données dessinées.

Cela devrait être quelque chose comme ça :

std::vector<double> x; 
std::vector<double> y; 
//fill x and y vectors
//make sure they're the same size etc
QwtPlotCurve curve( "Foo" ); 
//or use &x[ 0 ] or &(*x.first()) pre-C++11
cure.setSamples( x.data(), y.data(), (int) x.size() );
curve.attach( &plot );

http://qwt.sourceforge.net/class_qwt_plot_curve.html

http://qwt.sourceforge.net/class_qwt_plot.html

4voto

JBL Points 5419

Une façon de procéder serait d'attacher une courbe à votre tracé, c'est-à-dire.. :

QwtPlotCurve myCurve;
myCurve->attach(&d_plot);

Vous pouvez alors utiliser (dans une fonction membre, ou là où vous en avez besoin) la fonction QwtPlotCurve::setRawSample dont la signature est assez explicite :

void QwtPlotCurve::setRawSample(const double* xData, const double* yData, int size);

Définissez vos données et appelez ensuite replot() pour rafraîchir l'image. Cela signifie que vous devez également disposer d'un vecteur pour les valeurs x.

Le code ressemblerait à ceci :

int main( int argc, char **argv )
{
   //...
   Plotter* d_plot = new Plotter();

   //Plot config

   // PLOT THE DATA
   std::vector<double> data_y;
   data_y.push_back(1.03);
   data_y.push_back(13.12);
   std::vector<double> data_x;
   data_x.push_back(1.0);
   data_x.push_back(2.0);
   //....
   myCurve->setRawSample(data_x.data(),data_y.data(),data_y.size());
   d_plot->resize( 600, 400 );
   d_plot->replot();
   d_plot->show();
   //...
}

Je vous suggère d'étudier la Qwt doc sur la courbe

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X