IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Débutant avec Qt. besoin d'aide


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 60
    Points : 68
    Points
    68
    Par défaut Débutant avec Qt. besoin d'aide
    Bonjour à tous,
    je débute avec Qt et donc pour l'instant je teste des exemples.
    j'ai trouvé la définition de la classe Counter ci après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #include <QObject>
     
     class Counter : public QObject
     {
         Q_OBJECT
     
     public:
         Counter() { m_value = 0; }
     
         int value() const { return m_value; }
     
     public slots:
         void setValue(int value);
     
     signals:
         void valueChanged(int newValue);
     
     private:
         int m_value;
     };
    Je précise que j'utilise le plugin eclipse Qt et Qt 4.4.3.

    J'ai donc déclaré cette en deux partie, un fichier d'en-tête Counter.h,

    ==============>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    #ifndef COUNTER_H_
    #define COUNTER_H_
     
    #include <QObject>
     
    class Counter {
     
    	Q_OBJECT
     
    public:
    	Counter();
    	int value() const;
     
    public slots:
    	void setValue(int value);
     
    	signals:
    	void valueChanged(int value);
     
    private:
    	int m_value;
    };
     
    #endif /* COUNTER_H_ */
    et un fichier .cpp

    ======================>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    #include "Counter.h"
     
    Counter::Counter2() {
    }
     
    int Counter::value() const
    {
    	return m_value;
    }
     
    void Counter::setValue(int value) {
    	if (m_value != value) {
    		m_value = value;
    		emit valueChanged(value);
    	}
    }
     
    void Counter::valueChanged(int value)
    {
     ///
    }
    Alors, le problème, c'est que j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    mingw32-make debug 
    mingw32-make -f Makefile.Debug
    mingw32-make[1]: Entering directory `C:/Users/laurykarin/Documents/eclipse-cpp-ganymede-SR1-win32/workspace/Test'
    g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\4.4.3\include\QtCore" -I"c:\Qt\4.4.3\include\QtCore" -I"c:\Qt\4.4.3\include\QtGui" -I"c:\Qt\4.4.3\include\QtGui" -I"c:\Qt\4.4.3\include" -I"c:\Qt\4.4.3\include\ActiveQt" -I"debug" -I"." -I"c:\Qt\4.4.3\mkspecs\win32-g++" -o debug\main.o main.cpp
    main.cpp: In function `int qMain(int, char**)':
    main.cpp:21: error: no matching function for call to `QObject::connect(Counter2*, const char[19], Counter2*, const char[15])'
    c:/Qt/4.4.3/include/QtCore/../../src/corelib/kernel/qobject.h:197: note: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
    c:/Qt/4.4.3/include/QtCore/../../src/corelib/kernel/qobject.h:303: note:                 bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
    mingw32-make[1]: *** [debug/main.o] Error 1
    mingw32-make[1]: Leaving directory `C:/Users/laurykarin/Documents/eclipse-cpp-ganymede-SR1-win32/workspace/Test'
    mingw32-make: *** [debug] Error 2
    le code de la fonction principale (main) est le suivant qui se trouve dans un fichier "test.cpp" est le suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #include "test.h"
    #include "Counter.h"
     
    #include <QApplication>
    #include <QObject>
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
     
        Counter a, b;
        QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));
     
     
        a.setValue(12);
        b.setValue(45);
     
        app.exec();
    }


    Merci pour votre aide.
    PS : l'exemple est à la page suivante : http://qt.developpez.com/doc/4.4/signalsandslots/

  2. #2
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Plus bas dans cette page se trouve la solution (§ "A real example"):
    The Q_OBJECT macro is expanded by the preprocessor to declare several member functions that are implemented by the moc; if you get compiler errors along the lines of "undefined reference to vtable for LcdNumber", you have probably forgotten to run the moc or to include the moc output in the link command.
    où "moc" est un lien vers son utilisation. Puisque tu utilises Eclipse, je suppose que tu n'utilises pas les .pro, et donc la page indiquée répondra tout à fait à ta question.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 60
    Points : 68
    Points
    68
    Par défaut
    J'utilise bien Eclipse et le .pro est présent par défaut.
    En fait, le projet généré est un projet tout à fait complet avec tout ce qui faut '.pro' et compagnie.
    Seulement, je ne veut pas avoir d'interface graphique, juste tester les différentes fonctionnalités de Qt, comme par exemple la possibilité pour un objet quel qu'il soit ne pouvoir être notifier d'un évènement particulier. Donc je pense que je n'ai pas besoin d'interface à priori pour ça. Je crois aussi qu'Eclipse utilise qmake donc comme s'est dit dans la page dont tu m'a passé le lien, on a pas besoin d'appeler le moc.


    La question reste don entière.

  4. #4
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Il faut simplement ajouter ton en-tête à la section HEADER du fichier pro alors...

Discussions similaires

  1. débutant sur mysql besoin d'aide
    Par feragne dans le forum Débuter
    Réponses: 9
    Dernier message: 05/06/2007, 13h07
  2. Problème avec Webalizer, besoin d'aide
    Par jojodeparis dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 16/06/2006, 22h54
  3. Débutant C++.net Besoins d'aide !!!
    Par Dlyan dans le forum MFC
    Réponses: 45
    Dernier message: 24/02/2006, 18h15
  4. Débutant qui a besoin d'aide
    Par BerneyBoy dans le forum Langage
    Réponses: 1
    Dernier message: 14/01/2006, 22h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo