Partage
  • Partager sur Facebook
  • Partager sur Twitter

Acceder aux reponses de QFormLayout

Sujet résolu
    11 juillet 2019 à 20:00:07

    Bonjour,

    Je suis débutant sur QT comme vous vous en doutez vu le niveau de ma question, mais voila, j'ai lu le tuto "Programmez avec le language cpp" et dans la partie QT, je n'arrive pas à récupérer les valeurs de  QFormLayout, je m'explique :

    Voici mon créateur : 

    fenetre_questionnaire1::fenetre_questionnaire1() : QWidget()
    {
        QLineEdit *m_nom = new QLineEdit;
    
        QFormLayout *layout = new QFormLayout;
        layout->addRow("Quel est le nom du détenteur du compte ?", m_nom);
    
    
        QVBoxLayout *layoutPrincipal = new QVBoxLayout;
        layoutPrincipal->addLayout(layout);
    
        QPushButton * boutonOk = new QPushButton("OK");
        QPushButton *boutonRetour = new QPushButton("Annuler");
    
        QWidget::connect(boutonOk, SIGNAL(clicked()), this , SLOT(creation_porte_feuille()));
        QWidget::connect(boutonRetour, SIGNAL(clicked()), this, SLOT(close()));
    
        layoutPrincipal->addWidget(boutonRetour); // Ajout du bouton
        layoutPrincipal->addWidget(boutonOk);
    
        this->setLayout(layoutPrincipal);
        this->show();
    }

    Qui, de manière simple, demande è l'utilisateur son nom, et le stock dans m_nom

    et voici mon slot que j'ai créé :

    void fenetre_questionnaire1::creation_porte_feuille(){
    
        double d_solde;
        Personne pers(m_nom,m_prenom);
        d_solde = m_solde.toDouble();
        Porte_feuille port(pers,d_solde,m_fichier1,m_fichier2);
        port.set_vide();
        port.creation_en_tete();
    }
    

    La fonction creation_en_tete() me permet d'ecrire en gros les données que j'ai lu (ici en raccourci m_nom dans le QFormLayout).

    Comme vous l'aurez surement compris j'ai mis m_nom en attribut mais malheureusement cela ne modifie pas sa valeur.

    Comment dois-je faire ? sachant que à la base la seule chose que je désire faire c'est donc écrire dans une fichier (à l'aide de la derniere ligne) le m_nom donné par l'utilisateur.

    dans l'attente d'une ame charitable ^^


    -
    Edité par ThomasDubois22 11 juillet 2019 à 23:13:13

    • Partager sur Facebook
    • Partager sur Twitter
      12 juillet 2019 à 9:56:43

      Salut,

      Peux-tu préciser le constructeur de ta classe Personne svp ?

      De ce que je lis, dans ton slot, tu passes à cette classe deux paramètres de type QLineEdit (pas de m_prenom dans ton 1er code, il est ailleurs ou bien oublié ?).  Ma question est donc : est-ce que tu souhaites véritablement passer ces types là, ou bien souhaites-tu passer en paramètres du constructeur de Personne des QString (ou des std::string) ?

      Si la réponse est le 2ème cas, alors il faut que tu accèdes aux valeurs de tes composants via les méthodes disponibles (setText() pour ajouter du texte, et, en l’occurrence ce qui t'intéresse, text() pour récupérer l'information écrite par tes utilisateurs).

      ++

      • Partager sur Facebook
      • Partager sur Twitter

      Si ça n'explose pas, alors ce n'est pas intéressant.

        12 juillet 2019 à 14:16:27

        Bonjour

        Merci de ta réponse.

        J'avais déjà en effet bien un problème de conversion entre QLineEdit et QString, j'ai réglé ce problème mais ca ne marche toujours pas.. et le probleme vient bien de l'enregistrement des données de QLineEdit donc donées par l'utilisateur. En effet, jai changé un peu mon code pour qu'il soit plus lisible pour vous :

        #include "fenetre_questionnaire1.h"
        #include "personne.h"
        #include "porte_feuille.h"
        
        #include <QWidget>
        #include <QLineEdit>
        #include <QFormLayout>
        #include <QPushButton>
        #include <QString>
        
        
        fenetre_questionnaire1::fenetre_questionnaire1() : QWidget()
        {
            QLineEdit *nom = new QLineEdit;
            QLineEdit *prenom = new QLineEdit;
        
            QFormLayout *layout = new QFormLayout;
            layout->addRow("Quel est le nom du détenteur du compte ?", nom);
            layout->addRow("Quel est le prénom du détenteur du compte ?", prenom);
        
            m_nom = nom->text();
            m_prenom = prenom->text();
        
        
            QVBoxLayout *layoutPrincipal = new QVBoxLayout;
            layoutPrincipal->addLayout(layout);
        
            QPushButton * boutonOk = new QPushButton("OK");
            QPushButton *boutonRetour = new QPushButton("Annuler");
        
            QWidget::connect(boutonOk, SIGNAL(clicked()), this , SLOT(creation_porte_feuille()));
            QWidget::connect(boutonRetour, SIGNAL(clicked()), this, SLOT(close()));
        
            layoutPrincipal->addWidget(boutonRetour);
            layoutPrincipal->addWidget(boutonOk);
        
            this->setLayout(layoutPrincipal);
            this->show();
        }
        void fenetre_questionnaire1::creation_porte_feuille(){
            QMessageBox::critical(nullptr,"données",m_nom + m_prenom);
        
        }
        

        Avec le .h suivant :

        #ifndef FENETRE_QUESTIONNAIRE1_H
        #define FENETRE_QUESTIONNAIRE1_H
        #include <QString>
        #include <QtWidgets>
        
        
        
        class fenetre_questionnaire1 : public QWidget {
            Q_OBJECT
        public:
            fenetre_questionnaire1();
        public slots:
            void creation_porte_feuille();
        
        private:
            QString m_prenom;
            QString m_nom;
            QString m_fichier1;
            QString m_fichier2;
            QString m_solde;
        
        };
        
        #endif // FENETRE_QUESTIONNAIRE1_H
        






        Et mon QMessageBox ne me retourne rien (=je n'ai rien dans mes attribut de classe m_nom et m_prenom)...

        -
        Edité par ThomasDubois22 12 juillet 2019 à 18:55:32

        • Partager sur Facebook
        • Partager sur Twitter
          12 juillet 2019 à 21:45:45

          Salut essaie avec çà pour voir:

          m_nom.append(nom->text());
          m_prenom.append(prenom->text());
          qDebug()<<m_nom<<" "<<m_prenom;




          -
          Edité par King Ju 12 juillet 2019 à 22:06:01

          • Partager sur Facebook
          • Partager sur Twitter
            12 juillet 2019 à 21:52:52

            King Ju a écrit:

            Salut essaie avec çà pour voir:

            m_nom.append(nom->text());
            m_prenom.append(prenom->text());


            -
            Edité par King Ju il y a moins de 30s

            Non ca marche pas non plus....

            • Partager sur Facebook
            • Partager sur Twitter
              12 juillet 2019 à 21:55:53

              C'est a dire as tu verifie le contenu de m_nom et m_prenom ?
              • Partager sur Facebook
              • Partager sur Twitter
                12 juillet 2019 à 22:07:16

                Oui en effet,

                je lance le constructeur, cela affiche la fenetre QFormLayout avec les bouttons Ok et annuler, j'écris les données pour m_prenom et m_nom, j'appuie sur Ok ce qui lance le slot creation_porte_feuille() qui affiche alors le QMessageBox qui est vide, m_nom et m_prenom sont donc, j'imagine, vides!

                • Partager sur Facebook
                • Partager sur Twitter
                  12 juillet 2019 à 22:10:35

                  Tu imagines ^^ affiche la sortie avec qDebug() comme j’ai repris au dessus et n'oublie pas d'inclure QDebug dans le header. Ça va t'afficher le contenu de m_prenom et m_nom. Comme ça tu seras sûr !

                  -
                  Edité par King Ju 12 juillet 2019 à 22:13:45

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juillet 2019 à 22:14:07

                    King Ju a écrit:

                    tu imagines ! affiches la sortie avec qDebug() comme jai repris au dessus


                    Fait! et rien ne s'affiche à part "   "......
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 juillet 2019 à 22:46:24

                      euh attends tous les include que tu fais dans le .cpp à partir de la ligne 5 sont pas plutot censées etre dans le  .h ?

                      -
                      Edité par King Ju 12 juillet 2019 à 22:48:08

                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 juillet 2019 à 23:23:55

                        King Ju a écrit:

                        euh attends tous les include que tu fais dans le .cpp à partir de la ligne 5 sont pas plutot censées etre dans le  .h ?

                        -
                        Edité par King Ju il y a 30 minutes

                        Je viens de les passer en .h et aucun changement...

                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 juillet 2019 à 1:57:45

                          > (1) je lance le constructeur, cela affiche la fenetre QFormLayout avec les bouttons Ok et annuler, (2) j'écris les données pour m_prenom et m_nom, j'appuie sur Ok ce qui lance le slot creation_porte_feuille() qui affiche alors le QMessageBox qui est vide

                          • 1) À ce stade, m_prenom et m_nom sont vides. Les fenêtres n’apparaîtront qu'après la fin de fenetre_questionnaire1.
                          • 2) tu écris dans les QLineEdit, c'est à creation_porte_feuille d'en extraire les noms.

                          m_prenom et m_nom devrait être les QLineEdit.

                          Au passage, SLOT et SIGNAL sont des vieilleries, utilise la "nouvelle" syntaxe. Entre guillemet, parce que je suis pas sûr qu'une syntaxe qui a déjà 6 ans puisse être appelée nouvelle...

                          QObject::connect(
                            boutonOk, &QPushButton::clicked,
                            this, &fenetre_questionnaire1::creation_porte_feuille);

                          -
                          Edité par jo_link_noir 13 juillet 2019 à 1:58:49

                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 juillet 2019 à 14:20:47

                            Merci beaucoup @jo_link_noir c'est beaucoup plus clair pour moi et en effet ca fonctionne!!

                            Je pense avoir compris comment ca fonctionne grace à toi!

                            Je ne connaissait pas la deuxieme méthode que tu explique pour les slots, merci encore!



                            • Partager sur Facebook
                            • Partager sur Twitter

                            Acceder aux reponses de QFormLayout

                            × 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