Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
987 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  courbes avec qwt

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

courbes avec qwt

n°1685503
benito5965​0
Posté le 12-02-2008 à 18:36:22  profilanswer
 

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

mood
Publicité
Posté le 12-02-2008 à 18:36:22  profilanswer
 

n°1685504
IrmatDen
Posté le 12-02-2008 à 18:38:58  profilanswer
 

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
n°1685505
benito5965​0
Posté le 12-02-2008 à 18:52:16  profilanswer
 

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

n°1685508
IrmatDen
Posté le 12-02-2008 à 19:02:41  profilanswer
 

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.

n°1685510
benito5965​0
Posté le 12-02-2008 à 19:09:33  profilanswer
 

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

n°1685511
IrmatDen
Posté le 12-02-2008 à 19:12:59  profilanswer
 

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.

n°1685512
benito5965​0
Posté le 12-02-2008 à 19:16:38  profilanswer
 

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

n°1685513
IrmatDen
Posté le 12-02-2008 à 19:19:39  profilanswer
 

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

n°1685514
benito5965​0
Posté le 12-02-2008 à 19:28:56  profilanswer
 

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

n°1685552
IrmatDen
Posté le 12-02-2008 à 20:59:12  profilanswer
 

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
mood
Publicité
Posté le 12-02-2008 à 20:59:12  profilanswer
 

n°1685583
benito5965​0
Posté le 12-02-2008 à 22:47:43  profilanswer
 

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ù?

n°1685593
IrmatDen
Posté le 12-02-2008 à 23:43:01  profilanswer
 

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)

n°1685596
benito5965​0
Posté le 12-02-2008 à 23:55:44  profilanswer
 

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

n°1685599
IrmatDen
Posté le 13-02-2008 à 00:03:44  profilanswer
 

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)

n°1685600
benito5965​0
Posté le 13-02-2008 à 00:05:58  profilanswer
 

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

n°1685601
IrmatDen
Posté le 13-02-2008 à 00:12:23  profilanswer
 

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

n°1685603
benito5965​0
Posté le 13-02-2008 à 00:16:06  profilanswer
 

ok merci beaucoup en tout cas


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  courbes avec qwt

 

Sujets relatifs
VB:représentation de courbes mathématiquesClasses C# pour le tracé des courbes mathématiques
Comment creer 2 axes de courbes en vb pour 2 seriesDans un graph comment creer 2 axes de courbes en vb pour 2 series
[VBA-E] Tracer des courbes en polaire (Cercle & cie)graphique : Courbes qui ne devraient pas commencer au point d'origine
affichage de graph, de courbes, d'histogrammes en c++A tous ceux qui s'y connaissent en programmation: tracé de courbes.etc
MSchart avec plusieurs courbes[C] widget GTK/GNOME pour affichage de courbes
Plus de sujets relatifs à : courbes avec qwt


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR