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 :

Qt | msvc.net | signaux non reçu par les slots ?


Sujet :

Qt

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Qt | msvc.net | signaux non reçu par les slots ?
    Bonjour a tous,
    je me lance dans la programation avec qt, et cela m'a l'air bien plus sympa qu'avec les MFC!! Toutefois les signaux et slots, ca demande encore un peu de boulot.
    Sources qt 4.1.4 compilée OK, qt-assistant, qt-demo etc ... ca marche nickel.
    Compilo : vc++ du msvc.net 2003 13.10.3077 for 80x86
    MS Plateform sdk 2003 R2

    J'essaie des petits pgms pour me familiariser avec les signaux et slots. La compilation se passe sans problemes. Quand je lance le pgm....RIEN... le vide, la ligne blanche, encephalograme plat. J'ai repiqué un code sur internet, au cas ou... pareil, rien (voir a la fin du mail). J'ai recompilé les sources, même chose.
    Le code a la fin du mele definit 2 class "sender" et une classe "receiver". Je connecte le deux premiers au dernier. Lorsque le signal est emis, je m'attends a avoir une sortie ecran (venat du reciever). Mais en fait rien du tout. Il se compile bien, pas d'erreur.

    je seche...

    si qq peu me dire ou est le pb.

    merci d'avance,

    Alexis

    CODE (avec remerciement indirect tutoriaux internet)
    HEADER
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #include <iostream>
    #include <QObject.h>
     
     
    class Reciever : public QObject
    {
      Q_OBJECT
     
    public:
    	int ir;
      Reciever( int i ) 
      {
    	  ir=i;
      }
     
    public slots:
      void get( int x )
      {
        std::cout << "Recieved: " << x << std::endl;
      }
    };
     
    class SenderA : public QObject
    {
      Q_OBJECT
     
    public:
    	int ia;
      SenderA( int i)
      {
    	  ia=i;
      }
     
      void doSend()
      {
        emit( send( 7 ) );
      }
     
    signals:
      void send( int );
    };
     
    class SenderB : public QObject
    {
      Q_OBJECT
     
    public:
    		int ib;
     
      SenderB( int i)
      {
    	  ib=i;
      }
     
      void doStuff()
      {
        emit( transmit( 5 ) );
      }
     
    signals:
      void transmit( int );
    };
    MAIN
    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
    #include <QObject>
    #include <QApplication>
    //Contient la def des class plus haut.
    #include "classFile.h"
     
     
    using namespace std;
     
     
    int main( int argc, char **argv )
    {
     
    	Reciever r(1);
    	SenderB b(2);
    	SenderA a(3);
     
    	QObject::connect(&b,SIGNAL(transmit(int)),&r,SLOT(get(int)));
    	QObject::connect(&a,SIGNAL(sent(int)),&r,SLOT(get(int)));
     
    	b.doStuff();
    	a.doSend();
     
     
      return 0;
    }

  2. #2
    Membre régulier Avatar de nicO1077
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 107
    Points : 111
    Points
    111
    Par défaut
    Bonsoir,
    Petite question, tu as fait tes modifs perso (ajout de signal/slot et QObject::connect) à la main dans le .cpp ??

    Si c'est le cas, à mon avis (je n'ai pas la science infuse non plus !! ) c'est à toi de faire à la main le moc sur ton fichier pour que tout soit bien pris en compte !! Le moc te produisant alors un cpp contenant le code qui permet la prise en compte des signaux et des slots (Je peux me tromper, je débute aussi sous Qt 4 !!)

    Si c'est bien cette histoire là, tu dois taper en ligne de commande un truc du genre "moc [parametres] NomFichier.moc.cpp NomFichier.cpp" et rajouter dans le fichier une phrase du style #include "main.moc.cpp" tout à la fin du fichier (fichier main dans ce cas)

    Espérant que solution tu trouveras

  3. #3
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 38
    Points : 46
    Points
    46
    Par défaut
    salut,
    en fait dans ton main tu n'as pas d'instance de QApplication (tu as bien l'include mais tu ne l'utilise pas). pour toute application Qt il faut une et une seule instance de QApplication ou simplement QCoreApplication si tu ne fais pas une application graphique (QApplication dérive de QCoreApplication). c'est cet objet qui gère les évenements.
    il te faut donc dans ton main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(int argc, char ** argv)
    {
      QApplication app(argc, argv);
     
      // ton code;
     
      return app.exec();
    }

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    nicO1077 et pititom51, merci de vos suggestions, j'ai finalement trouvé ou était le pb. Pour info et pour les ceusses que cela interesse, dans le fichier mkspecs\win32-msvc.net\qmake.conf (et en fait je pense que c'est valable pour les autres version de visual) le linker est defini avec les directives

    QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS
    si on remplace par
    QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:CONSOLE
    (vu que le pgm de test prend la sortie console)

    apres ca marche

    bonne journée et encore merci,

    Caml.
    (il y a un bouton pour mettre le status en resolu ?)

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par nicO1077
    Bonsoir,
    Petite question, tu as fait tes modifs perso (ajout de signal/slot et QObject::connect) à la main dans le .cpp ??

    Si c'est le cas, à mon avis (je n'ai pas la science infuse non plus !! ) c'est à toi de faire à la main le moc sur ton fichier pour que tout soit bien pris en compte !! Le moc te produisant alors un cpp contenant le code qui permet la prise en compte des signaux et des slots (Je peux me tromper, je débute aussi sous Qt 4 !!)

    Si c'est bien cette histoire là, tu dois taper en ligne de commande un truc du genre "moc [parametres] NomFichier.moc.cpp NomFichier.cpp" et rajouter dans le fichier une phrase du style #include "main.moc.cpp" tout à la fin du fichier (fichier main dans ce cas)

    Espérant que solution tu trouveras
    Euh... non, vaut mieux pas modifier le code généré par moc et l'inclure directement, on le compile à part, comme un fichier cpp normal

  6. #6
    Membre régulier Avatar de nicO1077
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 107
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Miles
    Euh... non, vaut mieux pas modifier le code généré par moc et l'inclure directement, on le compile à part, comme un fichier cpp normal
    Oui, c'est ce que je fais aussi, je viens de relire mon ancien post et il est vrai que je m'étais mal exprimé !!

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    En fait qmake se charge de creer le moc, et de le compiler. Il n'y a donc rien a faire.

    bonne soiree
    Caml

  8. #8
    Membre régulier Avatar de nicO1077
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 107
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Camlpet
    En fait qmake se charge de creer le moc, et de le compiler. Il n'y a donc rien a faire.

    bonne soiree
    Caml
    Bonsoir, en multi fichier, il fait tout tout seul le qmake, mais si on travaille en mono fichier ? il me semble que c'est à nosu de faire le moc, parce que l'on ne se sert pas alors de l'icone "moc" non ?

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par nicO1077
    Bonsoir, en multi fichier, il fait tout tout seul le qmake, mais si on travaille en mono fichier ? il me semble que c'est à nosu de faire le moc, parce que l'on ne se sert pas alors de l'icone "moc" non ?
    Mono fichier ??? Comprend pas. qmake peut gérer aussi un seul fichier, c'est quoi le problème ? Quelle icône moc ?

  10. #10
    Membre régulier Avatar de nicO1077
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 107
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Miles
    Mono fichier ??? Comprend pas. qmake peut gérer aussi un seul fichier, c'est quoi le problème ? Quelle icône moc ?
    Bonsoir,
    Oui, bon d'accord !! je m'explique !!!

    J'entend par mono fichier (bien qu'il y en ai déjà plusieurs de généré par Qt), un simple programme style exercice !! A savoir si on rajoute deux ou trois classes de notre crû, on les codes avant le main !!

    Quand à l'icone, j'entendais par là le petit icone de la barre d'outils de Qt sous Visual Studios, pour faire justement le qmake et le moc !!

    Euh...je m'exprime toujours mal ??

    Bon d'accord, j'arrete le pc, et je vais me coucher un peu !!!

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ah, OK, je n'ai pas le plug-in pour Visual, c'est pour ça.
    A partir du moment où tes classes sont dans un header, le moc peut passer dessus. C'est clair que si tu n'en as pas...

  12. #12
    Membre régulier Avatar de nicO1077
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 107
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Miles
    Ah, OK, je n'ai pas le plug-in pour Visual, c'est pour ça.
    A partir du moment où tes classes sont dans un header, le moc peut passer dessus. C'est clair que si tu n'en as pas...
    Bonjour,
    Ok !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [fx2.0][vb.net] ConfigurationManager non reconnu ?
    Par Dextro dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/03/2009, 16h13
  2. Réponses: 16
    Dernier message: 19/05/2008, 18h09
  3. Réponses: 3
    Dernier message: 28/01/2008, 10h51
  4. [VB.NET] Type non défini quand j'appelle un Windows Form ?
    Par beegees dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2006, 12h12

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