Partage
  • Partager sur Facebook
  • Partager sur Twitter

Crash de l'app au lancement d'un slot

tp zeroclassgenerator

    28 janvier 2018 à 2:06:52

    Bonjour a tous

    je travaille en ce moment sur le tp ZeroClassGenerator du cours de c++ et je rencontre un probleme que je n'arrive pas a resoudre :/

    Lorsque je clique sur le bouton 'générer', le programme crash indique en sortie "Le programme s'est terminé subitement."

    J'ai tenté de recompiler, executer qmake ou encore nettoyer le projet mais ca n'a pas fonctionner

    voici mon code

    .pro

    /QT += widgets
    
    SOURCES += \
        fenprincipale.cpp \
        fencodegenere.cpp \
        main.cpp
    
    HEADERS += \
        fenprincipale.h \
        fencodegenere.h

    main.cpp

    #include <QApplication>
    #include <fenprincipale.h>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
    
        /*Generateur de class c++
        TP cours openclassroom
        26/01/2018
        */
    
        //Creation fenetre principal
    
        FenPrincipale fenetre;
    
        //Execution
    
        fenetre.show();
    
        return app.exec();
    }

    fenprincipale.h

    #ifndef FENPRINCIPALE_H
    #define FENPRINCIPALE_H
    
    #include <QWidget>
    #include <QLayout>
    #include <QGroupBox>
    #include <QFormLayout>
    #include <QLineEdit>
    #include <QCheckBox>
    #include <QTextEdit>
    #include <QDateEdit>
    #include <QPushButton>
    #include "fencodegenere.h"
    
    class FenPrincipale : public QWidget
    {
        Q_OBJECT
    
        public:
            FenPrincipale();
    
        private slots:
            void genererClass();
    
        private:
            QGroupBox *grp1;
            QLayout *afa;
            QLineEdit *nom;
            QLineEdit *mere;
            QFormLayout *layoutGrp1;
            QGroupBox *grp2;
            QCheckBox *check1;
            QCheckBox *check2;
            QCheckBox *check3;
            QVBoxLayout *layoutGrp2;
            QGroupBox *grp3;
            QLineEdit *auteur;
            QDateEdit *date;
            QTextEdit *commentaire;
            QFormLayout *layoutGrp3;
            QPushButton *generer;
            QPushButton *quitter;
            QGridLayout *grp4;
            QVBoxLayout *layoutPrincipal;
    
    
    };
    
    #endif // FENPRINCIPALE_H
    

    fenprincipale.cpp

    #include "fenprincipale.h"
    #include <QLayout>
    #include <QGroupBox>
    #include <QFormLayout>
    #include <QLineEdit>
    #include <QCheckBox>
    #include <QTextEdit>
    #include <QDateEdit>
    #include <QPushButton>
    #include <QMessageBox>
    
    
    FenPrincipale::FenPrincipale()
    {
        setWindowTitle("Zero Class Generator");
    
        //Groupe 1
            QGroupBox *grp1 = new QGroupBox;
            grp1->setTitle("Définition de la classe");
    
            QLineEdit *nom = new QLineEdit;
            QLineEdit *mere = new QLineEdit;
    
            QFormLayout *layoutGrp1 = new QFormLayout(grp1);
            layoutGrp1->addRow("&Nom",nom);
            layoutGrp1->addRow("&Classe mère",mere);
    
            grp1->setLayout(layoutGrp1);
    
        //Groupe 2
            QGroupBox *grp2 = new QGroupBox;
            grp2->setTitle("Options");
    
            QCheckBox *check1 = new QCheckBox("Protéger le &header contre les inclusions multiples");
            check1->setChecked(true);
            QCheckBox *check2 = new QCheckBox("Générer un &constructeur par défaut");
            check2->setChecked(true);
            QCheckBox *check3 = new QCheckBox("Générer un &destructeur");
    
            QVBoxLayout *layoutGrp2 = new QVBoxLayout;
            layoutGrp2->addWidget(check1);
            layoutGrp2->addWidget(check2);
            layoutGrp2->addWidget(check3);
    
            grp2->setLayout(layoutGrp2);
    
        //Groupe 3
            QGroupBox *grp3 = new QGroupBox;
            grp3->setTitle("Ajouter des commentaires");
            grp3->setCheckable(true);
    
            QLineEdit *auteur = new QLineEdit;
            QDateEdit *date = new QDateEdit;
            QTextEdit *commentaire = new QTextEdit;
    
            QFormLayout *layoutGrp3 = new QFormLayout;
            layoutGrp3->addRow("&Auteur",auteur);
            layoutGrp3->addRow("Da&te de création",date);
            layoutGrp3->addRow("&Rôle de la classe",commentaire);
    
            grp3->setLayout(layoutGrp3);
    
        //Groupe 4
            QPushButton *generer = new QPushButton("Générer !");
            QPushButton *quitter = new QPushButton("Quitter");
    
            QHBoxLayout *grp4 = new QHBoxLayout;
            grp4->addWidget(generer);
            grp4->addWidget(quitter);
    
            grp4->setAlignment(Qt::AlignRight);
    
        //Layout principale
            QVBoxLayout *layoutPrincipal = new QVBoxLayout;
            layoutPrincipal->addWidget(grp1);
            layoutPrincipal->addWidget(grp2);
            layoutPrincipal->addWidget(grp3);
            layoutPrincipal->addLayout(grp4);
    
        setLayout(layoutPrincipal);
    
        //Connections
    
        connect(quitter,SIGNAL(clicked(bool)),this,SLOT(close()));
        connect(generer,SIGNAL(clicked(bool)),this,SLOT(genererClass()));
    
    }
    
    
    void FenPrincipale::genererClass()
    {
        if (nom->text().isEmpty())
        {
            QMessageBox::critical(this,"Erreur","Veuillez selectionner au moins un nom de classe");
        }
    
        QString code;
    
        if((grp3->isChecked())==true)
        {
            code+="/*\rAuteur : "+auteur->text()+"\rDate de création : "+date->text()+"\nRôle :\r"+commentaire->toPlainText()+"\r*/\n\n";
        }
    
        QString nomMaj = nom->text();
        nomMaj = nomMaj.toUpper();
    
        if(check1->isChecked())
        {
            code+="#ifndef HEADER_"+nomMaj+"\r#define HEADER_"+nomMaj+"\r\r";
        }
    
        code+="class "+nom->text();
    
        if(!(mere->text()==""))
        {
            code+=": public "+mere->text();
        }
    
        code+="\r{\r\tpublic:\r";
    
        if(check2->isChecked())
        {
            code+="\t\t"+nom->text()+"();";
        }
    
    
        if(check3->isChecked())
        {
            code+="\r\t\t~"+nom->text()+"();";
        }
    
        code+="\r\n\tprotected:\r\n\tprivate:\r\n};";
    
        if(check1->isChecked())
        {
            code+="#endif "+nomMaj+"_H";
        }
    
        FenCodeGenere *test = new FenCodeGenere(code,this);
        test->exec();
    
    
    }

    fencodegenere.h

    #ifndef FENCODEGENERE_H
    #define FENCODEGENERE_H
    
    #include <QString>
    #include <QDialog>
    #include <QTextEdit>
    #include <QPushButton>
    
    class FenCodeGenere : public QDialog
    {
    public:
        FenCodeGenere();
        FenCodeGenere(QString &a, QWidget *parent);
    private:
        QTextEdit *zone;
        QTextEdit *quitter;
    };
    
    #endif // FENCODEGENERE_H
    
    fencodegenere.cpp
    
    #include "fencodegenere.h"
    #include <QLayout>
    
    FenCodeGenere::FenCodeGenere()
    {
    
    }
    
    FenCodeGenere::FenCodeGenere(QString &a, QWidget *parent = 0) : QDialog(parent)
    {
        setWindowTitle("Zero Class Generator");
    
        QTextEdit *zone = new QTextEdit;
        zone->setText(a);
        QPushButton *quitter = new QPushButton("Quitter");
    
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(zone);
        layout->addWidget(quitter);
    
        setLayout(layout);
    
        QObject::connect(quitter,SIGNAL(clicked(bool)),this,SLOT(close()));
    }
     j'ai aussi essayer d'executer la correction du tp donné dans le cours et le meme probleme survient
    Quelqu'un aurait une solution? :/
    alex
    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2018 à 10:16:21

      bonjour ,

      pour t-aider je pourrai avoir un .rar ?

      • Partager sur Facebook
      • Partager sur Twitter
        29 janvier 2018 à 12:08:18

        Salut

        As tu passe ton code au debugger?

        Sinon, tu semble suivre le cours d'OC et tu devrais t'en abstenir pour tout une série de raison (cherche la moindre intervention de Ksass Peuk sur le forum, elles sont super claires a ce sujet). Le cours de gbdivers est généralement conseille comme alternative francophone.

        • Partager sur Facebook
        • Partager sur Twitter
          29 janvier 2018 à 17:37:03

          Salut,

          J'ai un peu la flegme, mais une rapide recherche sur le forum t'aurais permis de trouver cette discussion...

          • Partager sur Facebook
          • Partager sur Twitter
          Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
            23 juin 2019 à 17:50:46

            Salut, L'erreur de ce code est la suivante: Vous avez déclareé à nouveau les attributs dans le constructeur ce qui fait que vos attributs qui sont dans le prototype de la classe fenprincipale ne sont pas utilisés. En faite quand on clique sur generer dans le SLOT lors du 1er test, la variable nom n'existe pas, le compilateur cherche cette variable et ne la trouve pas d'où l'arret subite!!!

            • Partager sur Facebook
            • Partager sur Twitter

            Crash de l'app au lancement d'un slot

            × 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