Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] Divers problèmes pour la création d'une calculatrice

    12 juin 2008 à 14:53:49

    Salut, j'ai décidé d'essayer de créer une calculatrice avec Qt mais, après avoir conçu ma feuille de route pour le développement, j'ai quelques problèmes lors de l'application avec le code.

    Il y a en tout 17 boutons prévu et 1 champ (les 10 chiffres, les 5 signes opératoires, 1 bouton pour résoudre l'opération et 1 bouton "Quitter").

    J'ai donc crée les boutons (QPushButton) et le champ (QLineEdit), un layout (QGridLayout) et j'ai placé les 17 widgets crées dans le fenêtre comme sur une grille.

    Pour que l'utilisateur puisse utiliser la calculatrice sans toucher au champ, les boutons doivent afficher dans le champ leur nom (sauf le bouton "Quitter" qui ferme l'application et le bouton "Valider" qui affiche le résultat du calcul demandé en dessous du champ via QLabel)
    Je crée donc 16 SLOT (le SLOT pour le bouton quitter existe par défaut) mais, mon debbuger indique 16 erreurs au niveau de la déclaration des SLOTS (une par SLOT déclaré sauf pour le bouton "Quitter"), pourtant conforme à cet exemple :

    class MaFenetre : public QWidget
    {
        Q_OBJECT
     
        public:
        MaFenetre();
     
        public slots:
        void monSlot();
     
        private:
        //Tout les Widgets crées
    };
    

    Ensuite, j'implémente ces SLOTS dans dans le fichier contenant le constructeur
    MaFenetre::MaFenetre() : QWidget
    

    de la façon suivante :
    void MaFenetre::slot_plus()
    {
     champ->setText("+");
    }
    

    Je ne sais pas ce qu'il faut employer pour l'emploi du constructeur ci-dessus :
    QObject::connect(bouton_plus, SIGNAL(clicked()), qApp, SLOT(//je bloque ici
    


    Donc, pour résumer mes questions sont :

    Comment faire pour afficher quelque chose dans QLineEdit car je ne suis pas sur de la commande que j'ai employé ?

    Pourquoi mon compilateur renvoie une erreur quand j'utilise la structure de déclaration des SLOTS employée par M@téo21 ?

    Comment faire pour que, quand la formule sera déclarée dans le champ, un clic sur le bouton "Valider" la calcule ?

    Merci

    J'utilise QDevelop.
    • Partager sur Facebook
    • Partager sur Twitter
      12 juin 2008 à 19:03:30

      QObject::connect( bouton_plus, SIGNAL( clicked() ), this, SLOT( slot_plus() ) );

      Ton slot appartient à ta classe MaFenetre et non à l'application !!
      IL ne bug pas pour la fonction quit car quit() ou close() appartient bien à l'application.
      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2008 à 8:55:17

        et je pense que ton programme va continuer de planter, parce que tu ne peux pas faire champ->setText("+'); parce que ca remplace le texte par "+", mais que tu dois faire autrement... Je prefere ne pas donner la methode, parce que j'ai un doute et que je ne voudrais pas dire d'erreur!
        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2008 à 9:40:35

          Donc je dois déclarer mon SLOT de la façon suivante :
          MaFenetre::MaFenetre§) : QWidget()
          {
            void MaFenetre::slot_plus()
            {
              champ->setText("+");
            }
          }
          

          ?

          Et comment faire pour que les signes opératoires soient affichés dans le champ en tant que tel et sans remplacer le reste et que l'opération saisie soit effectués lors d'1 clic sur le bouton "Valider" ?
          • Partager sur Facebook
          • Partager sur Twitter
            13 juin 2008 à 10:22:28

            Mais non !!

            MaFenetre::MaFenetre() : QWidget
            {
            ....
            
            QObject::connect( bouton_plus, SIGNAL( clicked() ), this, SLOT( slot_plus() ) );
            QObject::connect( bouton_plus, SIGNAL( clicked() ), this, SLOT( slot_moins() ) );
            QObject::connect( bouton_quit, SIGNAL( clicked() ), qApp, SLOT( quit() ) );
            
            }
            
            void MaFenetre::slot_plus()
            {
             champ->setText( champ->text() + "+");
            }
            
            void MaFenetre::slot_moins()
            {
             champ->setText( champ->text() + "-");
            }
            



            champ->setText( champ->text() + "-");
            Tu récupérè le texte qui est déjà dedans et tu l'insère avec le nouveau !

            Et on ne déclare jamais une fonction dans une autre ! La tu as un soucis de base !!
            • Partager sur Facebook
            • Partager sur Twitter
              14 juin 2008 à 10:42:29

              J'ai suivit à la lettre sans réfléchir le conseil de guigui' >_< .
              Sinon, après avoir compris et appliqué ta méthode, il ne reste plus qu'une erreur :
              fenetre.setLayout(layout);
              

              qui renvoie l'erreur suivante :
              src/header.cpp:70: erreur: «((MaFenetre*)this)->QWidget::fenetre» does not have class type
              • Partager sur Facebook
              • Partager sur Twitter
                14 juin 2008 à 11:43:51

                A moins que tu es crée un Widget "fenetre" dans ta classe, le fenetre est inutile.

                Tu dois appeler la méthode setLayout, appartenant à ta classe donc tu dois juste mettre :
                setLayout(layout);
                
                • Partager sur Facebook
                • Partager sur Twitter

                [Qt] Divers problèmes pour la création d'une calculatrice

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown