Partage
  • Partager sur Facebook
  • Partager sur Twitter

Encapsulation

    29 novembre 2021 à 15:31:04

    Bonjour,

    Je ne sais pas si le problème a été déjà posé. Pardon mais je le pose quand même.

    Je débute avec QT. J’essaie de mettre un 'QFormLayout' ou/et un ' QLineEdit' dans une fenêtre. Voici mon projet :

    un fichier Teste.h, Teste.cpp et Main.cpp

    Teste.h =>

    #ifndef TESTE_H

    #define TESTE_H
     #include <QApplication>
     #include <QWidget>
     #include <QPushButton>
     #include <QFormLayout>
     #include <QLineEdit>
     class Fprincipale : public QWidget
     {
     Q_OBJECT
     public:
     Fprincipale();
     private:
     QPushButton *BtnQuitter;
     QLineEdit *nom;
    QFormLayout *Flayout;
     };
    #endif// TESTE_H


    Teste.cpp =>

    //Teste.cpp

    #include<Teste.h>
    Fprincipale::Fprincipale():QWidget() { setFixedSize(300,150); QLineEdit*nom=newQLineEdit("Votre nom",nom); //Construction du bouton 'Quitter' BtnQuitter=newQPushButton("Quitter",this); BtnQuitter->setGeometry(200,100,80,30); //Connexion du Boutton pour lafermeture de l'application QObject::connect(BtnQuitter,SIGNAL(clicked()),qApp,SLOT(quit())); }

     Main.cpp =>

    #include <QApplication>

    #include <QLineEdit>
    #include <QPushButton>
    #include <Teste.h>
    int main(int argc, char *argv[])
    {
     QApplication app(argc, argv);

     Fprincipale fenetre;
     fenetre.show();
     return app.exec();
    }

     Mes Questions:

    1° Puis je ajouter un 'QLineEdit' dans un Form. même chose pour un 'QFormLayout'?

    2° Si oui, Est ce que l'écriture pour  'QLineEdit' est valide dans mon cas?

    Merci pour votre aide et Bonne journée.

    Alain

    • Partager sur Facebook
    • Partager sur Twitter
      30 novembre 2021 à 8:35:26

      1) Oui on peut ajouter un QLineEdit dans un QFormLayout

      2) J'en sais rien ton code est illisible (surtout teste.cpp et c'est quand même là que se trouve le plus important), édite ton message et copie ton code en utilisant le bouton dédié stp

      -
      Edité par ThibaultVnt 30 novembre 2021 à 8:35:43

      • Partager sur Facebook
      • Partager sur Twitter
        30 novembre 2021 à 18:04:01

        Bonsoir et merci pour votre réponse,

        Pardon pour le code illisible.

        1° Oui j'ai ajouter un 'QLineEdit dans un QFormLayout' mais est ce que je peux le faire dans une classe 'Form'(fenêtre).

        2° Je réécris mes trois Fichiers et j'espère qu'ils sont lisibles.

        Merci pour votre aide.

        Alain

        1) Fichier Teste.h :

        #ifndef TESTE_H
        #define TESTE_H
         #include <QApplication>
         #include <QWidget>
         #include <QPushButton>
         #include <QFormLayout>
         #include <QLineEdit>

         class Fprincipale : public QWidget
         {
             Q_OBJECT

            public:
              Fprincipale();

             private:
             QPushButton *BtnQuitter;
             QLineEdit *nom;
             QFormLayout *Flayout;
         };

        #endif// TESTE_H

        2) Fichier Teste.cpp :

        #include<Teste.h>

        Fprincipale::Fprincipale():QWidget()
        {
             setFixedSize(300,150);

             QLineEdit*nom=newQLineEdit("Votre nom",nom);

            //Construction du bouton 'Quitter'
             BtnQuitter=newQPushButton("Quitter",this);
             BtnQuitter->setGeometry(200,100,80,30);

            //Connexion du Boutton pour la fermeture de l'application
             QObject::connect(BtnQuitter,SIGNAL(clicked()),qApp,SLOT(quit()));
        }

        3) Fichier Main.cpp :

        #include <QApplication>
        #include <QLineEdit>
        #include <QPushButton>
        #include <Teste.h>

        int main(int argc, char *argv[])

        {
            QApplication app(argc, argv);

            Fprincipale fenetre;

            fenetre.show();

            return app.exec();
        }
        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2021 à 18:45:38

          c'est plus beau comme ca: 

          le fichier Teste.h:

          #ifndef TESTE_H
          #define TESTE_H
          #include <QApplication>
          #include <QWidget>
          #include <QPushButton>
          #include <QFormLayout>
          #include <QLineEdit>
          
          class Fprincipale : public QWidget
          {
              Q_OBJECT
          
              public:
                Fprincipale();
          
              private:
               QPushButton *BtnQuitter;
               QLineEdit *nom;
               QFormLayout *Flayout;
           };
          
          #endif// TESTE_H

          Teste.cpp

          #include<Teste.h>
          
          Fprincipale::Fprincipale():QWidget()
          {
               setFixedSize(300,150);
          
               QLineEdit* nom = new QLineEdit("Votre nom",nom);
          
              //Construction du bouton 'Quitter'
               BtnQuitter = new QPushButton("Quitter",this);
               BtnQuitter->setGeometry(200,100,80,30);
          
              //Connexion du Boutton pour la fermeture de l'application
               QObject::connect(BtnQuitter,SIGNAL(clicked()),qApp,SLOT(quit()));
          }


          Main.cpp

          #include <QApplication>
          #include <QLineEdit>
          #include <QPushButton>
          #include <Teste.h>
          
          int main(int argc, char *argv[])
          
          {
              QApplication app(argc, argv);
          
              Fprincipale fenetre;
          
              fenetre.show();
          
              return app.exec();
          }

          non?;)

          -
          Edité par Le programmeur solitaire 30 novembre 2021 à 18:50:43

          • Partager sur Facebook
          • Partager sur Twitter

          le code FAIT le bonheur (pour moi en tous cas)

            30 novembre 2021 à 19:48:53

            Bonsoir,

            1° Tentative en voulant corriger mon projet, j'ai ce message avec un triangle jaune :

            "2nd function call argument is an uninitialized value [clang-analyzer-core.CallAndMessage]"

            sur la ligne:

            QLineEdit*nom=newQLineEdit("Votre Nom :",nom);

            2° Tentative en copiant tout bêtement votre code(Pardon) : triangle jaune et message sur la même ligne :

            "Value stored to 'nom' during its initialization is never read [clang-analyzer-deadcode.DeadStores]"

            Qu'est ce que j'ai loupé????

            Merci pour votre aide.

            Alain

            • Partager sur Facebook
            • Partager sur Twitter
              1 décembre 2021 à 8:37:03

              "2nd function call argument is an uninitialized value"

              Si on traduit littéralement ce message d'erreur ça donne : Le 2ème argument de la fonction appelée est une valeur non initialisée 

              Quelle est la fonction dont on parle ? C'est le constructeur du QLineEdit

              QLineEdit *nom = new QLineEdit("Votre Nom :",nom);

              Quel est son deuxième paramètre ? C'est la variable nom


              Et si on regarde ton code, nom c'est justement le nom de ta variable de type QLineEdit (il est très ma choisis ce nom de variable, ça fait des phrases tordues quand on explique). Donc tu donnes en 2nd paramètre de ton constructeur l'objet que tu es en train de construire. Comme il n'est pas encore construit, le compilateur te dit tout simplement que tu utilises une variable non initialisée comme paramètre de fonction

              Si on regarde la doc de Qt et le constructeur de QLineEdit, on voit que le 2nd argument est censé être un pointeur sur un QWidget qui deviendra le parent du QLineEdit. Un QLineEdit ne peut pas être son propre parent, ça n'a pas de sens.

              Tu essayes d'afficher ton QLineEdit dans ta Fprincipale, le minimum à faire pour que ton code fonctionne c'est de dire que ta fenêtre principale est le parent du QLineEdit

              nom = new QLineEdit("Votre Nom :",this);

              Comme tu veux ensuite le mettre dans un QFormLayout, le mieux est donc de créer ton QFormLayout avant de créer ton QLineEdit et de placer le QLineEdit dans le QFormLayout existant pour que le QFormLayout soit le parent du QLineEdit

              -
              Edité par ThibaultVnt 1 décembre 2021 à 12:01:16

              • Partager sur Facebook
              • Partager sur Twitter
                1 décembre 2021 à 11:36:50

                Et comme nom est le nom d'un champ de ton objet qui porte le même nom nom. Je pense que c'est lui qu'il faut mettre à jour, ça serait plutôt:
                nom = new QLineEdit("Votre Nom :",this); // on ne créé pas une locale, on a déjà ça dans les Fprincipale.
                • Partager sur Facebook
                • Partager sur Twitter

                En recherche d'emploi.

                  1 décembre 2021 à 12:00:40

                  Bien vu Dalfab, je n'avais même pas fait gaffe qu'il redéfinissait sa variable, ça risquait pas de compiler
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 décembre 2021 à 16:18:50

                    Re Bonjour,

                    1° Le fichier 'Main.cpp' reste inchangé.

                    2° le fichier 'Teste.h'
                    #ifndef TESTE_H
                    #define TESTE_H
                        #include <QApplication>
                        #include <QWidget>
                        #include <QPushButton>
                        #include <QLineEdit>
                        #include <QMessageBox>
                    
                        class Fprincipale : public QWidget
                        {
                            Q_OBJECT
                    
                           public:
                            Fprincipale();
                    
                          public slots:
                            void Voir();
                    
                           private:
                            QLineEdit *Vnom;
                            QPushButton *BtnQuitter;
                            QPushButton *BtnVoir;
                        };
                    #endif // TESTE_H

                    3° fichier Teste.cpp

                    #include <Teste.h>
                    
                    Fprincipale::Fprincipale():QWidget()
                    {
                        setWindowTitle("Les Layouts");
                        setWindowIcon(QIcon("icone.png"));
                        resize(300, 150);
                    
                          Vnom = new QLineEdit("Votre nom : ",this);
                          Vnom->setGeometry(50,20,80, 30);
                    
                        // Construction du bouton 'Quitter'
                         BtnQuitter = new QPushButton("Quitter", this);
                         BtnQuitter->setGeometry(200,100,80, 30);
                    
                         // Construction du bouton 'Voir'
                          BtnVoir = new QPushButton("Voir", this);
                          BtnVoir->setGeometry(100,100,40, 20);
                    
                    
                        //Connexion du click de BtnVoir pour voir le contenu de Vnom
                          QObject::connect(BtnVoir, SIGNAL(clicked()), this, SLOT(Voir()));
                    
                        // Connexion du click de BtnQuitter pour la fermeture de l'application
                         QObject::connect(BtnQuitter, SIGNAL(clicked()), qApp, SLOT(quit()));
                    }
                    
                    void Fprincipale::Voir()
                    {
                        QMessageBox::StandardButton (this, &Vnom,
                                                     QMessageBox::StandardButtons buttons = Ok,
                                                     QMessageBox::StandardButton defaultButton = NoButton)
                    
                    }
                    
                    Cela à l'air d'aller ça marche sauf :
                    - setWindowIcon(QIcon("icone.png")) => l’icône n'apparait pas problème de path() ?? le fichier étant sur ../build../debug/
                    - connexion du boutton 'voir' n'est pas encore faite??
                    - Reste un peu d'ergonomie sur le form pour l'emplacement de tous les contrôles les uns par rapport au autres.
                    - UNE grande question : QUELLE EST LA DIFFÉRENCE entre le controle form et QFormLayout? J'ai un peu de mal à assimiler l'anglais.

                    Merci pour votre aide et Bonne journée.

                    Alain

                    -
                    Edité par allaham 1 décembre 2021 à 17:47:07

                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 décembre 2021 à 16:40:45

                      S'il te plait prends 5 secondes pour insérer ton code correctement dans le forum, c'est très désagréable à lire 

                      -
                      Edité par ThibaultVnt 1 décembre 2021 à 16:42:14

                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 décembre 2021 à 16:43:59

                        Pardon, je refait et il apparait sur le post ci dessus car je l'ai modifié.

                        Merci pour le tuyau.

                        Bonne fin de journée.

                        -
                        Edité par allaham 1 décembre 2021 à 17:48:43

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Encapsulation

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        • Editeur
                        • Markdown