IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Mon programme Qt cesse de fonctionner

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 128
    Par défaut Mon programme Qt cesse de fonctionner
    Salut à tous

    Je suis toujours débutant en C++, et je travaille actuellement sur le créateur de classes d'un cours C++ . Cependant, lorsque j'utilise la méthode QTextEdit->setPlainText dans un SLOT, le programme cesse de fonctionner. Bizarrement si j'utilise la méthode ailleurs tout va. Et si j'enlève l'appel à la fonction du SLOT tout va aussi. Savez-vous de quoi vient ce problème ? Voici mes codes :

    fenetrePrincipale.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    #include "fenetrePrincipale.h"
     
    fenetrePrincipale::fenetrePrincipale(QWidget *parent) :
        QWidget(parent)
    {
        QVBoxLayout *conteneur = new QVBoxLayout;
        QVBoxLayout *conteneurOptions = new QVBoxLayout;
        QVBoxLayout *conteneurCommentaires = new QVBoxLayout;
        QGroupBox *definition = new QGroupBox("Définition de la classe");
        QGroupBox *options = new QGroupBox("Options");
        QGroupBox *commentaires = new QGroupBox("Commentaires");
        QFormLayout *formCommentaires = new QFormLayout;
        QFormLayout *formDefinition = new QFormLayout;
     
        QLineEdit *nomClasse = new QLineEdit;
        QLineEdit *mereClasse = new QLineEdit;
        QLineEdit *auteurClasse = new QLineEdit;
     
        QDateEdit *dateCreation = new QDateEdit;
        QTextEdit *roleClasse = new QTextEdit();
     
        QCheckBox *protegerHeader = new QCheckBox("Protéger le header contre les inclusions multiples");
        QCheckBox *genererConstructeur = new QCheckBox("Générer un constructeur par défaut");
        QCheckBox *genererDestructeur = new QCheckBox("Générer un destructeur par défaut");
        QCheckBox *ajouterCommentaires = new QCheckBox("Ajouter des commentaires");
     
        QPushButton *boutonValider = new QPushButton("Valider");
     
     
        conteneurOptions->addWidget(protegerHeader);
        conteneurOptions->addWidget(genererConstructeur);
        conteneurOptions->addWidget(genererDestructeur);
        options->setLayout(conteneurOptions);
     
        formDefinition->addRow("Nom de la classe :", nomClasse);
        formDefinition->addRow("Mère de la classe :", mereClasse);
     
        conteneurCommentaires->addWidget(ajouterCommentaires);
        formCommentaires->addRow("Auteur de la classe :", auteurClasse);
        formCommentaires->addRow("Date de la classe :", dateCreation);
        formCommentaires->addRow("Rôle de la classe :", roleClasse);
        conteneurCommentaires->addLayout(formCommentaires);
        commentaires->setLayout(conteneurCommentaires);
     
        definition->setLayout(formDefinition);
     
        conteneur->addWidget(definition);
        conteneur->addWidget(options);
        conteneur->addWidget(commentaires);
        conteneur->addWidget(boutonValider);
     
        this->setLayout(conteneur);
        QObject::connect(boutonValider, SIGNAL(clicked()), this, SLOT(creerContenu()));
    }
     
    void fenetrePrincipale::afficherContenu(QString contenu) {
     
    }
     
    QString fenetrePrincipale::creerContenu() {
        QString contenu("");
        if(ajouterCommentaires->checkState()) {
            contenu += "\n/*";
            if (auteurClasse->text() != "") {
                    contenu += "\nAuteur : " + auteurClasse->text();
            }
            contenu += "\nDate de création : " + dateCreation->date().toString();
            if (roleClasse->toPlainText() != "") {
                contenu += "\nCommentaires : " + roleClasse->toPlainText();
            }
            contenu += "\n*/\n\n";
        }
        if (protegerHeader->checkState()) {
            contenu += "#ifndef FENETREPRINCIPALE_H\n";
            contenu += "#define FENETREPRINCIPALE_H\n";
        }
        contenu += "class " + nomClasse->text();
        if (mereClasse->text() != "") {
            contenu += " : public " + mereClasse->text();
        }
        contenu += "\n{\n";
        contenu += "    public:\n";
        if (genererConstructeur->checkState()) {
            contenu += "        " + nomClasse->text() + "\n";
        } else {
            contenu += "        \n";
        }
        if (genererDestructeur->checkState()) {
            contenu += "        ~" + nomClasse->text() + "\n";
        } else {
            contenu += "        \n";
        }
        contenu += "        \n";
        contenu += "        \n";
     
        contenu += "    protected:\n";
        contenu += "        \n";
        contenu += "        \n";
        contenu += "        \n";
        contenu += "        \n";
     
        contenu += "    private:\n";
        contenu += "        \n";
        contenu += "        \n";
        contenu += "        \n";
        contenu += "        \n";
     
        if (protegerHeader->checkState()) {
            contenu += "#endif // FENETREPRINCIPALE_H\n";
        }
     
        contenu += "\n}";
        roleClasse->setPlainText(contenu);
        return contenu;
    }
    fenetrePrincipale.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #ifndef FENETREPRINCIPALE_H
    #define FENETREPRINCIPALE_H
     
    #include <QTGui>
    #include <QVBoxLayout>
    #include <QWidget>
    #include <QGroupBox>
    #include <QFormLayout>
    #include <QLineEdit>
    #include <QDateEdit>
    #include <QTextEdit>
    #include <QCheckBox>
    #include <QPushButton>
     
    class fenetrePrincipale : public QWidget
    {
        Q_OBJECT
    public:
        explicit fenetrePrincipale(QWidget *parent = 0);
     
    signals:
     
    public slots:
        void afficherContenu(QString contenu);
        QString creerContenu();
     
     
    private:
        QVBoxLayout *conteneur;
        QVBoxLayout *conteneurOptions;
        QVBoxLayout *conteneurCommentaires;
        QGroupBox *definition;
        QGroupBox *options;
        QGroupBox *commentaires;
        QFormLayout *formCommentaires;
        QFormLayout *formDefinition;
     
        QLineEdit *nomClasse;
        QLineEdit *mereClasse;
        QLineEdit *auteurClasse;
     
        QDateEdit *dateCreation;
        QTextEdit *roleClasse;
     
        QCheckBox *protegerHeader;
        QCheckBox *genererConstructeur;
        QCheckBox *genererDestructeur;
        QCheckBox *ajouterCommentaires;
     
        QPushButton *boutonValider;
     
    };
     
    #endif // FENETREPRINCIPALE_H
    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <QTGui>
    #include "fenetrePrincipale.h"
    #include <QApplication>
     
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    QString locale = QLocale::system().name().section('_', 0, 0);
    QTranslator translator;
    translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
    app.installTranslator(&translator);
     
    fenetrePrincipale *maFenetre = new fenetrePrincipale;
    maFenetre->show();
     
    return app.exec();
    }
    Merci d'avance

    Thomas

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    737
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 737
    Par défaut
    Bonjour.

    Tes widgets sont déclarés deux fois dans le header et dans le constructeur. Et comme ce sont ceux du constructeur qui sont initialisés, ceux du header ne pointent sur rien et donc il y a segfault.

    Supprime simplement les noms de classes et les * dans le constructeur.

    Par ailleurs, le bon include est <QtGui> et non <QTGui>.

    Tu peux également utiliser les déclarations anticipées pour ces widgets (voir la FAQ).

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 128
    Par défaut
    Merci, je venais de trouver la solution après des heures de recherche !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Le programme a cessé de fonctionner
    Par kryptong dans le forum Débuter
    Réponses: 13
    Dernier message: 31/03/2012, 14h45
  2. le programme a cessé de fonctionner
    Par ghost_23 dans le forum Windows Vista
    Réponses: 1
    Dernier message: 13/10/2009, 22h40
  3. Réponses: 0
    Dernier message: 10/04/2008, 00h45
  4. Pb deploiement : "Le programme a cessé de fonctionner"
    Par vikz dans le forum Général Dotnet
    Réponses: 13
    Dernier message: 12/03/2008, 15h39
  5. Réponses: 18
    Dernier message: 19/04/2007, 17h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo