Probleme de connect

Probleme de connect - C++ - Programmation

Marsh Posté le 19-02-2010 à 12:19:52    

Bonjour, nouveau jour nouveau problème   :D  
 
Aujourd'hui donc mon problème est lié à cette erreur :  

Citation :

error: no matching function for call to ‘curv::connect(Population&, const char*, curv* const, const char*)’


 
Elle m'apparait deux fois.
La première fais référence à cette ligne de code :

Code :
  1. if (!QObject::connect(pop, SIGNAL(mort()),this, SLOT(repain()))){qDebug("erreur de connection entre pop.mort() et repain()" );}


 
et la seconde à celle ci :

Code :
  1. if (!QObject::connect(pop, SIGNAL(naissance()),this, SLOT(repain()))){qDebug("erreur de connection entre pop.naissance() et repain()" );}


 
le code de la méthode où se trouve ces deux connect est le constructeur d'une QFrame contenant un QwtPlotCurve, en voici le code, avec les include :

Code :
  1. #include <qapplication.h>
  2. #include <qpainter.h>
  3. #include <qwt_math.h>
  4. #include <qwt_symbol.h>
  5. #include <qwt_curve_fitter.h>
  6. #include "curv.h"
  7. //
  8. //  CONSTRUCT MAIN WINDOW
  9. //
  10. curv::curv(int size, int xmin, int xmax, int ymin, int ymax, double *xval, double *yval, int ms, Population &population): QFrame(),pop(population)
  11. {
  12.     this->Size=size;
  13.     this->xval=new double [size];
  14.     this->yval=new double [size];
  15.     setFrameStyle(QFrame::Box|QFrame::Raised);
  16.     setLineWidth(2);
  17.     setMidLineWidth(3);
  18.     const QColor bgColor(30,30,50);
  19.     QPalette p = palette();
  20.     p.setColor(backgroundRole(), bgColor);
  21.     setPalette(p);
  22.     QwtSplineCurveFitter* curveFitter;
  23.     xMap.setScaleInterval(xmin, xmax);
  24.     yMap.setScaleInterval(ymin, ymax);
  25.     curve.setPen(QPen(QColor(150,150,200),2));
  26.     curve.setStyle(QwtPlotCurve::NoCurve);
  27.     curve.setCurveAttribute(QwtPlotCurve::Fitted, true);
  28.     curveFitter = new QwtSplineCurveFitter();
  29.     curveFitter->setSplineSize(150);
  30.     curve.setCurveFitter(curveFitter);
  31.     QwtSymbol sym;
  32.     sym.setStyle(QwtSymbol::XCross);
  33.     sym.setPen(QPen(Qt::yellow,2));
  34.     sym.setSize(7);
  35.     curve.setSymbol(sym);
  36.     for (int i=0; i<Size; i++)
  37.     {
  38.         this->xval[i]=xval[i];
  39.         this->yval[i]=yval[i];
  40.     }
  41.     curve.setRawData(this->yval,this->xval,Size);
  42.     if (!:connect(pop, SIGNAL(mort()),this, SLOT(repain()))){qDebug("erreur de connection entre pop.mort() et repain()" );}
  43.     if (connect(pop,SIGNAL(naissance()), this, SLOT(repain()))){qDebug("erreur de connection entre pop.naissance() et repain()" );}
  44.     //newValues();
  45.     //
  46.     // start timer
  47.     //
  48. //    (void)startTimer(ms);
  49. }


 
Pour info, pop est une références. J'ai testé en passant pop comme pointeur mais ça ne change rien. J'ai fais Qmake à chaque test que j'ai fais.
 
Mercis pour tout info m'aidant à résoudre et comprendre le problème.  :jap:  :jap:


Message édité par ailonn le 19-02-2010 à 13:30:40
Reply

Marsh Posté le 19-02-2010 à 12:19:52   

Reply

Marsh Posté le 19-02-2010 à 13:14:24    

Fais voir le .h de curv et Population.

 

(note : le QObject:: devant le connect ne sert à rien, tu peux le virer)


Message édité par Riot le 19-02-2010 à 13:15:08

---------------
Be the one with the flames.
Reply

Marsh Posté le 19-02-2010 à 13:30:16    

curv.h:  

Code :
  1. #include <qframe.h>
  2. #include <qwt_plot_curve.h>
  3. #include <qwt_scale_map.h>
  4. #include "population.h"
  5. class curv : public QFrame
  6. {
  7.     Q_OBJECT
  8. private:
  9.     enum { curveCount = 1 };
  10.     QwtScaleMap xMap;
  11.     QwtScaleMap yMap;
  12.     QwtPlotCurve curve;
  13.     //
  14.     //   Array Sizes
  15.     //
  16.     int Size;
  17.     Population& pop;
  18.     //
  19.     //   Arrays holding the values
  20.     //
  21.     double *xval;
  22.     double *yval;
  23. public slots:
  24.     void repain();
  25. public:
  26.     curv(int size, int xmin, int xmax, int ymin, int ymax, double *xval, double *yval,int ms, Population &pop);
  27. protected:
  28.     virtual void timerEvent(QTimerEvent *t);
  29.     virtual void paintEvent(QPaintEvent *);
  30.     virtual void drawContents(QPainter *);
  31. private:
  32.     void newValues();
  33. };


 
Population.h :

Code :
  1. #ifndef Population_H
  2. #define Population_H
  3. #include "individus.h"
  4. #include <cmath>
  5. #include "individusETvoisinage.h"
  6. #include <QObject>
  7. class Population : protected QObject
  8. {
  9.     Q_OBJECT
  10. signals:
  11.     void naissance();
  12.     void mort();
  13. public:
  14.     //constructeur
  15.     Population ();
  16.     Population(double b,double d, double zi,double r, int quantiteInit, double uMax);//, lib::Coordonnee dimension);
  17.     //destructeur
  18.     ~Population();
  19.     //méthodes membres
  20.     double calcTxGlobale();
  21.     double horlogeExponentiel(double tx);
  22.     void infoPopIndividus();
  23.     void infoPop();
  24.     void simulation();
  25.     //accesseurs
  26.     QVector<individusETvoisinage>& getVect(){return population;}
  27.     int getSize(){return population.size();}
  28.     Individus getInd(int i){return population.at(i).individus;}
  29.    
  30. private:
  31.     //méthode membres
  32.     void calculVoisin(int indice);
  33.     void MaJVoisinage(int indice, bool del=true);//del indique si la maj du voisinage correspond à la suppresion d'un individus des listes de voisins ou à son ajout
  34.     void initPopulation(int quatiteInit);
  35.     void initVoisinage();
  36.     double calcLambdaB();
  37.     double calcLambdaD();
  38.     double calcLambdaC();
  39.     //attributs
  40.     QVector<individusETvoisinage> population;
  41.     //caractéristiques des individus
  42.     double zoneInteraction;
  43.     double b; //taux de naissance
  44.     double d; //taux de décès
  45.     double r; //écart type du cône de dispersion
  46.     double uMax;
  47.     individusETvoisinage *data;
  48. };
  49. #endif // Population_H

Reply

Marsh Posté le 19-02-2010 à 13:41:28    

Tes constructeurs sont pas top. Tu devrais faire un truc comme ça :
 
curv::curv( QWidget* parent, int size, int xmin, int xmax, int ymin, int ymax, double *xval, double *yval,int ms, Population &pop) : QWidget( parent ),...
 
Population::Population( QObject* parent ) : QObject( parent )...


---------------
Be the one with the flames.
Reply

Marsh Posté le 19-02-2010 à 13:44:03    

Pourquoi ajouter un widget parent à curv ?
j'ai modifié mon constructeur de Population en ça :
Population::Population(..., QObject *parent): QObject(parent){...}
 
mais comme avant il me sort :

Citation :

error: ‘QObject::QObject(const QObject& )’ is private


 
A l'entrée de ma classe  Population.
 


Message édité par ailonn le 19-02-2010 à 13:49:22
Reply

Marsh Posté le 19-02-2010 à 13:58:58    

Essaie un  
connect( &pop, SIGNAL( mort() ), this, SLOT( repain() ) );
eu lieu de
 
connect( pop, SIGNAL( mort() ), this, SLOT( repain() ) );


---------------
Be the one with the flames.
Reply

Marsh Posté le 19-02-2010 à 14:06:03    

J'ai déjà essayé :
QObject::connect(pop, SIGNAL(mort()),this, SLOT(repain()));
 QObject::connect(&pop, SIGNAL(mort()),this, SLOT(repain()));
 en ayant pop déclaré pop comme suit : Population &pop dans le header
puis comme ça
QObject::connect(pop, SIGNAL(mort()),this, SLOT(repain()));
en ayant déclaré pop comme suit : Population *pop dans le header
 
Et à chaque fois il me dit des mots doux du style de l'erreur d'en haut.

Reply

Marsh Posté le 19-02-2010 à 14:14:18    

Pourquoi
# class Population : protected QObject
# {

 

Et pas
# class Population : public QObject
# {

 

?


Message édité par Riot le 19-02-2010 à 14:14:30

---------------
Be the one with the flames.
Reply

Marsh Posté le 19-02-2010 à 14:15:58    

je faisais des tests, mais ça change rien.

Reply

Marsh Posté le 19-02-2010 à 14:27:18    

Je cois pas...
Essaie là : http://forum.qtfr.org/


---------------
Be the one with the flames.
Reply

Marsh Posté le 19-02-2010 à 14:27:18   

Reply

Marsh Posté le 19-02-2010 à 14:50:27    

OK. Mercis.

Reply

Sujets relatifs:

Leave a Replay

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