Partage
  • Partager sur Facebook
  • Partager sur Twitter

ZeroClassGenerator : affichage d'une fenêtre vide

    4 août 2020 à 23:20:45

    Bonjour les Zéros !

    J'essaye de rajouter des onglets à la fenêtre du ZeroClassGenerator en ajoutant une table dansle deuxième onglet mais cela ne veut pas s'afficher la fenêtre reste désespérément vide. Quelqu'un peut voir pourquoi dans mon code ci-dessous cela ne fonctionne pas ?

    Indications : je n'ai pas touché à la classe FenPrincipale::genererCode() c'est pas elle qui pose problème. Ce sont les modifications que j'ai ajoutées dans FenPrincipale::FenPrincipale() qui ne sont pas bonnes.

    Cordialement,

    MW57

    #include "fenprincipale.h"
    #include "fencodegenere.h"
    
    FenPrincipale::FenPrincipale()
    {
    
        TabWidget = new QTabWidget;
        TabWidget->setSizePolicy(QSizePolicy::Preferred,
                                           QSizePolicy::Ignored);
    
        // Groupe : Définition de la classe
        nom = new QLineEdit;
        classeMere = new QLineEdit;
    
        QFormLayout *definitionLayout = new QFormLayout;
        definitionLayout->addRow("&Nom :", nom);
        definitionLayout->addRow("Classe &mère :", classeMere);
    
        QGroupBox *groupDefinition = new QGroupBox("Définition de la classe");
        groupDefinition->setLayout(definitionLayout);
    
        // Groupe : Options
    
    
        protections = new QCheckBox("Protéger le &header contre les inclusions multiples");
        protections->setChecked(true);
        genererConstructeur = new QCheckBox("Générer un &constructeur par défaut");
        genererDestructeur = new QCheckBox("Générer un &destructeur");
    
        QVBoxLayout *optionsLayout = new QVBoxLayout;
        optionsLayout->addWidget(protections);
        optionsLayout->addWidget(genererConstructeur);
        optionsLayout->addWidget(genererDestructeur);
    
        QGroupBox *groupOptions = new QGroupBox("Options");
        groupOptions->setLayout(optionsLayout);
    
    
    
        // Groupe : Commentaires
    
        auteur = new QLineEdit;
        date = new QDateEdit;
        date->setDate(QDate::currentDate());
        role = new QTextEdit;
    
        QFormLayout *commentairesLayout = new QFormLayout;
        commentairesLayout->addRow("&Auteur :", auteur);
        commentairesLayout->addRow("Da&te de création :", date);
        commentairesLayout->addRow("&Rôle de la classe :", role);
    
        groupCommentaires = new QGroupBox("&Ajouter des commentaires");
        groupCommentaires->setCheckable(true);
        groupCommentaires->setChecked(false);
        groupCommentaires->setLayout(commentairesLayout);
    
    
        // Layout : boutons du bas (générer, quitter...)
        generer = new QPushButton("&Générer !");
        quitter = new QPushButton("&Quitter");
    
        QHBoxLayout *boutonsLayout = new QHBoxLayout;
        boutonsLayout->setAlignment(Qt::AlignRight);
    
        boutonsLayout->addWidget(generer);
        boutonsLayout->addWidget(quitter);
    
    
        // Définition du layout principal, du titre de la fenêtre, etc.
    
        QWidget *tab1 = new QWidget;
    
        QVBoxLayout *layoutPrincipal = new QVBoxLayout;
        layoutPrincipal->addWidget(groupDefinition);
        layoutPrincipal->addWidget(groupOptions);
        layoutPrincipal->addWidget(groupCommentaires);
        layoutPrincipal->addLayout(boutonsLayout);
    
        setWindowTitle("Zero Class Generator");
        setWindowIcon(QIcon("icone.png"));
        resize(400, 450);
    
        tab1->setLayout(layoutPrincipal);
    
        QWidget *tab2 = new QWidget;
        tableWidget = new QTableWidget(10, 10);
    
        QHBoxLayout *tab2hbox = new QHBoxLayout;
        tab2hbox->setMargin(5);
        tab2hbox->addWidget(tableWidget);
        tab2->setLayout(tab2hbox);
    
        TabWidget->addTab(tab1, tr("&Table"));
        TabWidget->addTab(tab2, tr("Text &Edit"));
    
        // Connexions des signaux et des slots
        connect(quitter, SIGNAL(clicked()), qApp, SLOT(quit()));
        connect(generer, SIGNAL(clicked()), this, SLOT(genererCode()));
    
    }
    
    
    void FenPrincipale::genererCode()
    {
        // On vérifie que le nom de la classe n'est pas vide, sinon on arrête
        if (nom->text().isEmpty())
        {
            QMessageBox::critical(this, "Erreur", "Veuillez entrer au moins un nom de classe");
            return; // Arrêt de la méthode
        }
    
        // Si tout va bien, on génère le code
        QString code_h, code_cpp;
    
        if (groupCommentaires->isChecked()) // On a demandé à inclure les commentaires
        {
            code_h += "/*\nAuteur : " + auteur->text() + "\n";
            code_h += "Date de création : " + date->date().toString() + "\n\n";
            code_cpp += "/*\nAuteur : " + auteur->text() + "\n";
            code_cpp += "Date de création : " + date->date().toString() + "\n\n";
            code_h += "Rôle :\n" + role->toPlainText() + "\n*/\n\n\n";
        }
    
        if (protections->isChecked())
        {
            code_h += "#ifndef HEADER_" + nom->text().toUpper() + "\n";
            code_h += "#define HEADER_" + nom->text().toUpper() + "\n\n\n";
        }
    
        code_h += "class " + nom->text();
    
        if (!classeMere->text().isEmpty())
        {
            code_h += " : public " + classeMere->text();
        }
    
        code_h += "\n{\n    public:\n";
        if (genererConstructeur->isChecked())
        {
            code_h += "        " + nom->text() + "();\n";
        }
        if (genererDestructeur->isChecked())
        {
            code_h += "        ~" + nom->text() + "();\n";
        }
        code_h += "\n\n    protected:\n";
        code_h += "\n\n    private:\n";
        code_h += "};\n\n";
    
        if (protections->isChecked())
        {
            code_h += "#endif\n";
        }
    
        code_cpp += "#include \"" + nom->text() + "\"";
    
        // On crée puis affiche la fenêtre qui affichera le code généré, qu'on lui envoie en paramètre
        FenCodeGenere *fenetreCode = new FenCodeGenere(code_h, code_cpp, nom, this);
        fenetreCode->exec();
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2020 à 12:35:19

      Bonjour, peux tu donner le code de fenprincipale.h, parceque sinon on ne connait pas les caractéristiques de la classe et du coup c'est compliqué de t'aider.

      à tout hasard ajoutes la ligne suivante à la fin de ton constructeur:

      TabWidget->show();



      -
      Edité par bxdfr 6 août 2020 à 12:44:27

      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2020 à 20:56:46

        Bonjour,

        Merci pour votre aide mais j'ai trouvé à quoi cela tenait. Et j'ai une fois de plus trouvé tout seul comme un grand ! :)

        Il s'agissait deTabWidget=newQTabWidget(this); tout au début du programme je me suis apperçu en faisant des recherches que l'instanciation d'uneTabWidget réclamias un p

        • Partager sur Facebook
        • Partager sur Twitter
          20 août 2020 à 21:01:16

          Bonjour,
          Oooops désolé pour cette fausse manip le texte est parti tout seul !... Donc reprenons :
          Merci pour votre aide mais j'ai trouvé à quoi cela tenait. Et j'ai une fois de plus
          trouvé tout seul comme un grand ! :)
          Il s'agissait deTabWidget=newQTabWidget(this); tout au début du programme je me suis 
          aperçu en faisant des recherches que l'instanciation d'une TabWidget réclamais un 
          parent il fallait donc préciser un this entre parenthèses et maintenant tout fonctionne 
          à merveille !!!  Je suis troooop content car je commence à devenir débrouillard avec Qt 
          et je commence à arriver à faire des choses de moi-même. Youpiii. A quand aurais-je 
          réalisé le logiciel de mes rêve qui calcule et affiche la trajectoire d'une fusée qui 
          se rend dans l'espace pour y déposer un satellite en orbite autour de la terre et tout 
          cela avec mon langage préféré ! Cela devient tout doucement possible au fil des jours 
          qui passent et de mes progrès en Qt ! :) :) :)
          Cordialement,
          MW57
          • Partager sur Facebook
          • Partager sur Twitter
            20 août 2020 à 21:13:02

            Salut,

            Comment, on ne te l'as pas déjà dit cent fois?

            1- Le cours C++(hors Qt) de ce site est une véritable calamité, qui t'apprend un tas de mauvaises pratiques qu'il te sera difficile de "désapprendre" par la suite

            2- La partie Qt du cours est une véritable abomination obsolescence, car elle se base sur une version 4.x de Qt, alors que cela fait huit ans que l'on utilise la version 5.x (et que la version 6.0 devrait sortir pour la fin de l'année)

            • 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
              20 août 2020 à 21:23:18

              Oh là là pourquoi tant de haine.

              Je trouve le cours sur le C++ et Qt très bien pour l'avoir parcouru personnellement en ayant obtenu au final le fameux certificat de réussite.

              Je trouve votre réaction très négative et disproportionnée par rapport à ce qu'est ce cours en réalité car il m'a appris un tas de choses très importantes sur la programmation en C++ Qt et aujourd'hui je suis devenu autonome dans l'apprentissage du langage grâce à lui.

              Pour moi Openclassrooms est un très bon site de formation qui mérite d'être connu.

              A bon entendeur salut !

              MW57

              • Partager sur Facebook
              • Partager sur Twitter
                21 août 2020 à 0:46:44

                mw57 a écrit:

                Oh là là pourquoi tant de haine.

                Cela n'a rien à voir avec de la haine, c'est le constat fait et partagé par les professionnels du langage (dont je me flatte de faire partie)

                mw57 a écrit:

                Je trouve le cours sur le C++ et Qt très bien pour l'avoir parcouru personnellement

                Si c'est là ta seule expérience du C++, tu manques très clairement de  recul pour te faire une idée précise du problème.

                Je ne vais pas répéter une fois de plus ce qui a déjà du être dit des centaines de fois, je t'invite simplement à faire une recherche sur ce forum même afin de comprendre les reproches qui sont fait à ces cours ;)

                mw57 a écrit:

                en ayant obtenu au final le fameux certificat de réussite

                Donc, parce que tu as inutilement dépensé des sous qui auraient pu te servir à autre chose, tu pars forcément du principe que c'était un "bon investissement" et que tout ce que tu as appris est parole d'évangile, c'est ca?

                Au risque de te décevoir, c'est loin d'être le cas  :p

                mw57 a écrit:

                Je trouve votre réaction très négative et disproportionnée par rapport à ce qu'est ce cours en réalité

                Ma réaction n'a, malheureusement rien de "disproportionné" par rapport au court.  Bien au contraire ...  Maintenant, il est vrai que je ne suis développeur informatique  professionnel que depuis 2005, et que je manque  donc peut-être un peu de recul et d'expérience :D

                Ah, et, tant qu'à faire, autant me demander d'admettre que mon livre est une pure supercherie ;)

                mw57 a écrit:

                car il m'a appris un tas de choses très importantes sur la programmation en C++ Qt

                Heuu... Tu veux parler de tous ces trucs que tu devras désapprendre dés que ton projet commencera à compter un peu plus de cinq fichiers, du moins, si tu veux pouvoir fournir quelque chose d'un minimum correct et maintenable?

                mw57 a écrit:

                Pour moi Openclassrooms est un très bon site de formation qui mérite d'être connu.

                Je ne sais pas ce qu'il en est  pour  les autres langages, mais, en tout cas, pour ce qu'il en est du C++, il est complètement à la ramasse :p

                mw57 a écrit:

                A bon entendeur salut !

                J'ai bien entendu tes arguments.... J'espère que tu entendras aussi  bien les miens ;)

                Par contre, plutôt que de nous disputer ici et maintenant dans le feu du sujet, je vais te proposer de venir en rediscuter quand tu auras eu le temps de prendre un peu de recul... Mettons... d'ici trois mois, six moiis ou un an ?

                • 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

                ZeroClassGenerator : affichage d'une fenêtre vide

                × 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