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

Discussion :

Création de signal personnalisé

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 24
    Points
    24
    Par défaut Création de signal personnalisé
    Bonjour à tous,

    J'ai commencé à coder en C++ depuis peu et je suis un tutoriel. J'en suis à la partie sur Qt, et jusque la tout se passe bien. Après ce chapitre je me suis mis à coder pour m'exercer et le sujet est un écran simple de choix de race/unités pour un jeu de stratégie.

    Cependant en compilant mon programme j'ai une erreur que je ne comprends pas. J'ai créé un signal personnalisé pour communiquer de l'objets A vers l'objet B. J'ai donc dans le header de mon fichier A déclaré les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    signals:
        void enregistre(QString,QString,QString,QString,int);
    et dans le fichier ccp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    connect(this, SIGNAL(enregistre(QString,QString,QString,QString,int)), prog, SLOT(enregistre(QString,QString,QString,QString,int)));
     
    //et plus loin
     
    emit enregistre(nom1->text(), raceJ1->currentText(), nom2->text(), raceJ2->currentText(),valeur);
    dans le fichier B j'ai déclaré

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public slots :
        void enregistre(QString nomJ1,QString raceJ1,QString nomJ2,QString raceJ2,int valeur);
    et dans le fichier ccp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void programme::enregistre(QString nomJ1,QString raceJ1,QString nomJ2,QString raceJ2,int valeur)
    {
        nom1=nomJ1;
        nom2=nomJ2;
        race1=raceJ1;
        race2=raceJ2;
        points=valeur;
     
        FenArmee *fenetre2(points, race1, 1, this);
        fenetre2.show();
    }
    et j'obtiens l'erreur suivante :

    erreur : no matching function for call to 'A::connect(A* const, const char*, B*&, const char*)'
    connect(this, SIGNAL(enregistre(QString,QString,QString,QString,int)), prog, SLOT(enregistre(QString,QString,QString,QString,int)));

    j'ai peut etre mal compris les méthodes d'initialisation, mais j'ai bien relu le tuto et je comprends toujours pas.

    merci d'avance de vos réponses.

  2. #2
    Rédacteur/Modérateur
    Avatar de arnolddumas
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Autriche

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 978
    Points : 7 764
    Points
    7 764
    Par défaut
    Pourrais tu montrer le code de déclaration des classes A et B ainsi que la définition de la variable prog.

    Il est fort probable que l'erreur soit du au fait que A et B n'héritent pas de QObject.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Bonjour.

    D'abord merci de ta réponse rapide. Et efficace, parce qu'après test il s'avère que tu as raison, déclarer B comme héritant de QObject a réglé le problème.

    Mais cela pose un problème sur ma compréhension du sujet. Dans le header de B j'avais déclaré ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class B
    {
        Q_OBJECT
     
    public:
    ...
    Et je pensais que c'était cette ligne de code qui instaurais les méthodes comme connect, les signaux et les slots. Mais en relisant le tuto j'ai compris mon erreur. Merci beaucoup. je met le sujet en résolu.

  4. #4
    Rédacteur/Modérateur
    Avatar de arnolddumas
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Autriche

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 978
    Points : 7 764
    Points
    7 764
    Par défaut
    Comme indiqué dans la documentation, utiliser Q_OBJECT dans une classe n'héritant pas de QObject ne sert à rien.

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

Discussions similaires

  1. [MySQL] création flux RSS personnalisé
    Par dezpfab dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 24/10/2011, 23h10
  2. Création boite dialogue personnalisé pour ouverture fichier
    Par Xx_raaY dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/06/2009, 12h07
  3. Création de textbox personnalisé
    Par yoyopi dans le forum Windows Forms
    Réponses: 29
    Dernier message: 27/10/2008, 16h55
  4. Création de signal automatique (par wizard)
    Par coincoin73 dans le forum Débuter
    Réponses: 6
    Dernier message: 09/09/2008, 16h37

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