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 :

Problème avec un slot

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut Problème avec un slot
    Bonjour à tous,
    J'essaye d'apprendre à programmer un peu par ci par là et je rencontre un problème de taille pour moi ! Je n'arrive pas à relier mon interface graphique à mon code en quelque sorte. J'ai pour petit de départ de coder une petite calculatrice. Pour l'instant, seuls les chiffres sont présents, mais je n'arrive pas à modifier le QLabel sensé m'afficher ce que je tape. Je vous mets le .h et le .cpp ainsi que la sortie de l'application.

    J'espère que vous trouverez le temps de m'aider,
    Je vous remerci d'avance,
    Bawaa

    Le MaFenetre.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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #ifndef MAFENETRE_H
    #define MAFENETRE_H
     
    #include <QtGui>
    #include <QtWidgets>
    #include <QGridLayout>
    #include <QString>
    #include <QLabel>
     
    class MaFenetre : public QWidget
    {
        Q_OBJECT
     
        public:
            MaFenetre();
     
        private:
            QPushButton *m_bouton;
            QPushButton *bouton1;
            QPushButton *bouton2;
            QPushButton *bouton3;
            QPushButton *bouton4;
            QPushButton *bouton5;
            QPushButton *bouton6;
            QPushButton *bouton7;
            QPushButton *bouton8;
            QPushButton *bouton9;
            QPushButton *bouton0;
            QGridLayout *layout;
            QLabel *afficha;
        public slots:
            void changerText(QLabel *lbl);
     
    };
    #endif // MAFENETRE_H
    Le MaFenetre.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
    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
    #include "MaFenetre.h"
    #include <QPushButton>
    #include <QFont>
    #include <QObject>
    #include <QLabel>
     
     
    void MaFenetre::changerText(QLabel *lbl) {
     
        lbl->setText("Salut");
    }
     
     
    MaFenetre::MaFenetre() : QWidget()
    {
        setFixedSize(300, 170);
     
        m_bouton = new QPushButton("Quitter");
        bouton1 = new QPushButton("1");
        bouton2 = new QPushButton("2");
        bouton3 = new QPushButton("3");
        bouton4 = new QPushButton("4");
        bouton5 = new QPushButton("5");
        bouton6 = new QPushButton("6");
        bouton7 = new QPushButton("7");
        bouton8 = new QPushButton("8");
        bouton9 = new QPushButton("9");
        bouton0 = new QPushButton("0");
        afficha = new QLabel();
     
        afficha->setText("0");
     
        layout = new QGridLayout;
     
        layout->addWidget(afficha, 0, 0, 1, 3);
        layout->addWidget(bouton1, 1, 0);
        layout->addWidget(bouton2, 1, 1);
        layout->addWidget(bouton3, 1, 2);
        layout->addWidget(bouton4, 2, 0);
        layout->addWidget(bouton5, 2, 1);
        layout->addWidget(bouton6, 2, 2);
        layout->addWidget(bouton7, 3, 0);
        layout->addWidget(bouton8, 3, 1);
        layout->addWidget(bouton9, 3, 2);
        layout->addWidget(bouton0, 4, 1);
        layout->addWidget(m_bouton, 5, 0, 1, 3);
     
        setLayout(layout);
     
        QObject::connect(m_bouton, SIGNAL(clicked()), qApp, SLOT(quit()));
        QObject::connect(bouton1, SIGNAL(pressed()), afficha ,  SLOT(changerText(afficha)));
     
    }
    Et enfin la Sortie de l'application :

    Démarrage de /Users/Theophile/Projet Qt/build-Calculatrice-Desktop_Qt_5_1_1_clang_64bit-Debug/Calculatrice.app/Contents/MacOS/Calculatrice...QObject::connect: No such slot QLabel::changerText(afficha) in /Users/Theophile/Projet Qt/Calculatrice/MaFenetre.cpp:52

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par Bawaa Voir le message
    sensé m'afficher ce que je tape.
    Ce que tu tapes à quel endroit ? Je ne vois que des boutons, et dans le code que tu montres tu affiches juste "Salut".

    Étant donné que tu utilises le signal : bouton1, SIGNAL(pressed()) : pressed() qui ne passe aucun argument, tu n'as ici pas d'autre choix que d'utiliser un slot sans paramètre non plus. (Je t'invite à lire ce sujet de la FAQ pour l'explication.)

    Tu aurais donc ici (mais cela dépendra par la suite de la réponse à ma première question) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class MaFenetre : public QWidget {
        ...
        public slots:
            void changerText();
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void MaFenetre::changerText() {
     
        afficha->setText("Salut");
    }
     
    MaFenetre::MaFenetre() : QWidget()
    {
        ...
        // QObject:: devant n'est pas nécessaire : MaFenetre hérite de QObject
        // c'est this (ou MaFenetre) qui possède le slot changerText(), pas le QLabel
        connect(bouton1, SIGNAL(pressed()), this ,  SLOT(changerText()));
    Remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            QPushButton *bouton1;
            QPushButton *bouton2;
            QPushButton *bouton3;
            QPushButton *bouton4;
            QPushButton *bouton5;
            QPushButton *bouton6;
            QPushButton *bouton7;
            QPushButton *bouton8;
            QPushButton *bouton9;
            QPushButton *bouton0;
    Un tableau ou vector serait sans doute plus approprié.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut
    Effectivement, je me suis mal exprimé. Je voulais dire "lorsque que j'appuie sur un bouton".
    En ce qui concerne le "Salut", j'aurais surement du le remplacer par "1" avant de poster mais pour moi, il s'agissait juste d'une chaine de caractère comme une autre.

    Effectivement, je n'avais pas penser à un tableau, je vais essayer de modifier mon code en changeant ça . Merci

    Problème résolu grâce à toi. Merci beaucoup ! Je vais pouvoir avancer !
    A bientôt j'espère !

  4. #4
    Invité
    Invité(e)
    Par défaut
    OK je vois, tu souhaites donc connecter chaque bouton pour pouvoir afficher leur contenu lorsque tu cliques dessus.
    Dans ce cas je te conseille d'utiliser un QSignalMapper
    Voir Comment récupérer et utiliser l'objet déclencheur d'un slot avec QSignalMapper ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut
    Je vais regarder comment ça marche, merci pour l'astuce ! Bon il semblerait que j'ai pas mal de pain sur la planche ^^ !

  6. #6
    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 : 32
    Localisation : Autriche

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 978
    Par défaut
    Tu pourrais utiliser la classe QButtonGroup pour gérer plus facilement tous ces QPushButton.

Discussions similaires

  1. [2.x] Problème avec les slot
    Par bihman dans le forum Symfony
    Réponses: 0
    Dernier message: 15/04/2012, 13h56
  2. Problème avec les slots
    Par sebasti1-88 dans le forum Débuter
    Réponses: 5
    Dernier message: 29/06/2011, 22h10
  3. Problème avec les slots
    Par Far_Away dans le forum Débuter
    Réponses: 6
    Dernier message: 11/02/2011, 21h09
  4. Problème avec Q_Object et les SLOTS
    Par Shr3ck dans le forum Débuter
    Réponses: 3
    Dernier message: 06/04/2010, 13h56
  5. Problème avec un signal/slot
    Par scary dans le forum Qt
    Réponses: 12
    Dernier message: 11/12/2009, 21h20

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