courbes avec qwt

courbes avec qwt - C++ - Programmation

Marsh Posté le 12-02-2008 à 18:36:22    

Bonjour à tous,
 
Je suis débutant en C++, et je dois faire un programme qui trace des courbes. J'ai donc choisi qwt. Cependant je ne parviens pas à faire fonctionner les exemples donnés ici : http://www.digitalfanatics.org/pro [...] ter11.html et ici : http://qwt.sourceforge.net/class_qwt_plot.html .
 
Avant de vous faire peur avec tout ce texte , je tiens à préciser que je voudrais simplement des exemples basiques de traçage de courbe avec qwt, et pas forcément une correction des erreurs suivantes (que j'ai mis à titre indicatif au cas où il y aurait des erreurs simples)
 
Le premier exemple me donne comme message d'erreur :  
main.cc: In constructor «MyPlot::MyPlot(QWidget*, char*)":
main.cc:9: erreur: no matching function for call to «QwtPlot::QwtPlot(QWidget*&, char*& )"
/usr/local/qwt-5.0.2/include/qwt_plot.h:116: note: candidats sont: QwtPlot::QwtPlot(const QwtText&, QWidget*)
/usr/local/qwt-5.0.2/include/qwt_plot.h:115: note:                 QwtPlot::QwtPlot(QWidget*)
/usr/local/qwt-5.0.2/include/qwt_plot.h:78: note:                 QwtPlot::QwtPlot(const QwtPlot& )
main.cc:15: erreur: «setAutoLegend" was not declared in this scope
main.cc:16: erreur: «Qwt" has not been declared
main.cc:16: erreur: «setLegendPos" was not declared in this scope
main.cc:23: erreur: «insertCurve" was not declared in this scope
main.cc:41: erreur: «setCurveData" was not declared in this scope
main.cc:45: erreur: «blue" was not declared in this scope
main.cc:45: erreur: «setCurvePen" was not declared in this scope
main.cc:46: erreur: «green" was not declared in this scope
main.cc: In function «int main(int, char**)":
main.cc:58: erreur: «class QApplication" has no member named «setMainWidget"
make: *** [main.o] Erreur 1
 
et le deuxième :  
main.cc: At global scope:
main.cc:53: erreur: expected constructor, destructor, or type conversion before «*" token
main.cc:56: erreur: expected constructor, destructor, or type conversion before «=" token
main.cc:59: erreur: expected constructor, destructor, or type conversion before «*" token
main.cc:60: erreur: expected constructor, destructor, or type conversion before «*" token
main.cc:62: erreur: expected constructor, destructor, or type conversion before «(" token
main.cc:65: erreur: expected constructor, destructor, or type conversion before «->" token
main.cc:66: erreur: expected constructor, destructor, or type conversion before «->" token
main.cc:68: erreur: expected constructor, destructor, or type conversion before «->" token
main.cc:69: erreur: expected constructor, destructor, or type conversion before «->" token
main.cc:72: erreur: expected constructor, destructor, or type conversion before «->" token
make: *** [main.o] Erreur 1
 
 
Desolé de faire si long.
Dans le premier exemple j'ai rajouté les include suivant :
#include <qwt_plot.h>
#include <qwt_plot_curve.h>>
#include <Qapplication>
 
Si quelqu'un à une solution ou des exemples basiques à me donner, je vous remercie.
Je travail sur ubuntu.
 
Merci d'avance de vos réponses

Reply

Marsh Posté le 12-02-2008 à 18:36:22   

Reply

Marsh Posté le 12-02-2008 à 18:38:58    

Salut,

 

Tu peux poster ton main.cc stp?

 

Edit: entre balises [cpp ][ /cpp] (sans les espaces) pour faciliter la lecture de préférence


Message édité par IrmatDen le 12-02-2008 à 18:39:37
Reply

Marsh Posté le 12-02-2008 à 18:52:16    

premier exemple
 

Code :
  1. #include <qwt_plot.h>
  2. #include <qwt_plot_curve.h>
  3. #include <iostream>
  4. #include <QApplication>
  5. class MyPlot : public QwtPlot
  6. {
  7. public:
  8.   MyPlot( QWidget *parent=0, char *name=0 ) : QwtPlot( parent, name )
  9.   {
  10.     // Show a title
  11.     setTitle( "This is an Example" );
  12.     // Show a legend at the bottom
  13.     setAutoLegend( true );
  14.     setLegendPos( Qwt::Bottom );
  15.     // Show the axes
  16.     setAxisTitle( xBottom, "x" );
  17.     setAxisTitle( yLeft, "y" );
  18.     // Insert two curves and get IDs for them
  19.     long cSin = insertCurve( "y = sin(x)" );
  20.     long cSign = insertCurve( "y = sign(sin(x))" );
  21.     // Calculate the data, 500 points each
  22.     const int points = 500;
  23.     double x[ points ];
  24.     double sn[ points ];
  25.     double sg[ points ];
  26.     for( int i=0; i<points; i++ )
  27.     {
  28.       x[i] = (3.0*3.14/double(points))*double(i);
  29.    
  30.       sn[i] = 2.0*sin( x[i] );
  31.       sg[i] = (sn[i]>0)?1:((sn[i]<0)?-1:0);
  32.     }
  33.     // Copy the data to the plot
  34.     setCurveData( cSin, x, sn, points );
  35.     setCurveData( cSign, x, sg, points );
  36.     // Set the style of the curves
  37.     setCurvePen( cSin, QPen( blue ) );
  38.     setCurvePen( cSign, QPen( green, 3 ) );
  39.     // Show the plots
  40.     replot();
  41.   }
  42. };
  43. int main( int argc, char **argv )
  44. {
  45.   QApplication a( argc, argv );
  46.   MyPlot p;
  47.   a.setMainWidget( &p );
  48.   p.show();
  49.   return a.exec();
  50. }


 
Deuxième exemple :

Code :
  1. #include <qwt_plot.h>
  2. #include <qwt_plot_curve.h>
  3. QwtPlot *myPlot;
  4. double x[100], y1[100], y2[100];        // x and y values
  5. myPlot = new QwtPlot("Two Curves", parent);
  6. // add curves
  7. QwtPlotCurve *curve1 = new QwtPlotCurve("Curve 1" );
  8. QwtPlotCurve *curve2 = new QwtPlotCurve("Curve 2" );
  9. getSomeValues(x, y1, y2);
  10. // copy the data into the curves
  11. curve1->setData(x, y1, 100);
  12. curve2->setData(x, y2, 100);
  13. curve1->attach(myPlot);
  14. curve2->attach(myPlot);
  15. // finally, refresh the plot
  16. myPlot->replot();


 
pour ce deuxième exemple j'ai tenté plusieurs chose : d'abord à la barbare pour voir ce qu'on allait me dire, et on m'a dis tout ce que j'ai mis.  J'ai également essayé de créer des int main() mais ça faisait pareil
 
Merci

Reply

Marsh Posté le 12-02-2008 à 19:02:41    

Le code du tuto chez Digital Fanatics est franchement vieux, et pas compatible avec Qwt 5.
 
Pour le 2nd, faut mettre ça dans un widget, lequel sera créé à partir de main  (ou d'un autre widget).
 
Un conseil sérieux: oublie Qwt, oublie Qt, apprend le C++. Une fois que tu commenceras à être un peu à l'aise en C++, apprend Qt. Et une fois que tu seras à l'aise, apprend à te servir de Qwt.
Là, je doute vraiment que tu ais les bases minimales.

Reply

Marsh Posté le 12-02-2008 à 19:09:33    

Je l'ai dis je débute.
Je me suis fais tout le tutoriel du siteduzero j'ai bien compris. Je fais des cours de C++, et je me débrouille dans tous les exos, création et utilisation de classe, mais là c'est juste l'utilisation de Qt et de qwt que je ne maitrise pas du tout. C'est vrai que je n'ai pas du tout créé d'application avec Qt.
Mais je pense qu'il doit être possible de s'en sortir avec Qt et Qwt avec les bases que j'ai.
 
Tu connais un bon tutoriel pour Qt

Reply

Marsh Posté le 12-02-2008 à 19:12:59    

benito59650 a écrit :

Je l'ai dis je débute.


J'ai bien compris :)
Mais je préfère te dire que tu n'as clairement pas le niveau pour utiliser Qt et Qwt.
 
Parce que le 2nd code, c'est clair et net que l'utiliser sans widget, sans main, sans fonction, avec des variables inconnues, c'est évident que tu ne peux vraiment pas. Continue le C++ pendant encore 4 ou 5 mois (après tout dépend si c'est intensif et si tu percutes facilement), et seulement alors tu pourras être à l'aise avec Qt.
Le meilleur tuto pour ocmmencer avec Qt est celui de la doc qui te donne un bon aperçu du fonctionnement de Qt.

Reply

Marsh Posté le 12-02-2008 à 19:16:38    

Je sais que le deuxième code ne s'utlise pas comme ça, mais justemetn je voulais des exemples pour savoir comment l'utiliser.
Merci de ta réponse

Reply

Marsh Posté le 12-02-2008 à 19:19:39    

Ok, ben, quand je serais chez moi je te fais ça alors... mais je suis pas sûr de vraiment t'aider :P

Reply

Marsh Posté le 12-02-2008 à 19:28:56    

Merci beaucoup, moi je me met au tuto de Qt.

Reply

Marsh Posté le 12-02-2008 à 20:59:12    

Voilà:

Code :
  1. #include <QtGui>
  2. #include <qwt_plot.h>
  3. #include <qwt_plot_curve.h>
  4. class Window : public QWidget
  5. {
  6. public:
  7.     Window()
  8.     :valueCount(100), x (valueCount), y1(valueCount), y2(valueCount)
  9.     {
  10.         QwtPlot *myPlot = new QwtPlot(QwtText("Two Curves" ), this);
  11.        
  12.         // add curves
  13.         QwtPlotCurve *curve1 = new QwtPlotCurve("Curve 1" );
  14.         QwtPlotCurve *curve2 = new QwtPlotCurve("Curve 2" );
  15.         createCurveData();
  16.        
  17.         // copy the data into the curves
  18.         curve1->setData(x.data(), y1.data(), 100);
  19.         curve2->setData(x.data(), y2.data(), 100);
  20.         curve1->attach(myPlot);
  21.         curve2->attach(myPlot);
  22.        
  23.         // finally, refresh the plot
  24.         myPlot->replot();
  25.        
  26.         setFixedSize(myPlot->sizeHint());
  27.     }
  28.    
  29. private:
  30.     void createCurveData()
  31.     {
  32.         for(int i=0; i<valueCount; i++)
  33.         {
  34.             x[i]  = i;
  35.             y1[i] = i;
  36.             y2[i] = 100 - i;
  37.         }
  38.     }
  39.    
  40. private:
  41.     const int valueCount;
  42.     QVector<double> x;
  43.     QVector<double> y1;
  44.     QVector<double> y2;
  45. };
  46. int main(int argc, char **argv)
  47. {
  48.     QApplication app(argc, argv);
  49.     Window w;
  50.     w.show();
  51.     return app.exec();
  52. }


Message édité par IrmatDen le 12-02-2008 à 20:59:34
Reply

Marsh Posté le 12-02-2008 à 20:59:12   

Reply

Marsh Posté le 12-02-2008 à 22:47:43    

Ah merci beaucoup, mais au risque de me faire manger j'ai une petite erreur de compilation :
/usr/bin/ld: cannot find -lqwt
collect2: ld a retourné 1 code d'état d'exécution
make: *** [ex01] Erreur 1
 
 
voici pourtant mon .pro
 
TEMPLATE = app
TARGET =  
DEPENDPATH += .
INCLUDEPATH += . /usr/local/qwt-5.0.2/include
LIBS += -lqwt
 
# Input
SOURCES += main.cc
 
tu saurais ça viens d'où?

Reply

Marsh Posté le 12-02-2008 à 23:43:01    

LIBS += -L/usr/local/qwt-5.0.2/lib -lqwt  
 
(bien sûr, je te laisse corriger le chemin en adéquation avec ton install)

Reply

Marsh Posté le 12-02-2008 à 23:55:44    

snif ça compile mais  nouvelle erreur lors de l'execution :  
./ex01: error while loading shared libraries: libqwt.so.5: cannot open shared object file: No such file or directory

Reply

Marsh Posté le 13-02-2008 à 00:03:44    

Heu, là par contre... Ce fichier il est dans un répertoire de ton LD_LIBRARY_PATH ? S'il n'y est pas ajoute le, puis appelles ldconfig -si quelqu'un peut confirmer que c'est la commande pour "rafraîchir" cette variable en mémoire- (et peut-être avec sudo, je sais plus)

Reply

Marsh Posté le 13-02-2008 à 00:05:58    

j'ai entendu plusieurs fois parler de LD_LIBRARY_PATH mais je ne sais ce que c'est et où on le trouve

Reply

Marsh Posté le 13-02-2008 à 00:12:23    

Dans ton home, il me semble que tu as un fichier .bashrc qui sert en parie à le modifier comme il faut... Mais je n'ai eu à le faire qu'une fois ou 2, alors je commence à être en terrain inconnu.
 
Si c'est bien ça, il doit falloir y ajouter une ligne du type:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/vers/libqwt.so.5
Mais je ne saurais trop te conseiller de t'aider de google là dessus, ça se trouve assez rapidement, et tu réduiras les chances de "flinguer" temporairement ta session plutôt que de m'écouter ;p

Reply

Marsh Posté le 13-02-2008 à 00:16:06    

ok merci beaucoup en tout cas

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed