SLOT(), pointeur et fonction en C++

olivbarb -  
 olivbarb -
Bonjour,
J'ai un soucis avec un programme en C++ et Qt. Il compile très bien mais j'ai une erreur d'exécution : la fameuse fenêtre de windows disant ...a rencontré un problème et doit fermer. Et ce uniquement si je veux rentré un nom afin que le bouton Envoyer ne soit plus grisé

Pourriez-vous me dire où est mon erreur car je ne vois absolument pas.

Merci.

Voici le code
//main.cpp
#include <QApplication>
#include "fenetre.h"

int main(int argc, char*argv[])
{
    QApplication app(argc, argv);

    MaFenetre fenetre;

    fenetre.show();

    return app.exec();
}



//fenetre.h
#ifndef DEF_FENETRE
#define DEF_FENETRE


#include <QApplication>
#include <QPushButton>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QFormLayout>
#include <QLineEdit>
#include <QSpinBox>
#include <QMessageBox>
#include <QLabel>

class MaFenetre:public QWidget
{
    Q_OBJECT

    public:
    MaFenetre();

    public slots:
    void messageAbout();
    void messageAide();
    void messageEnvoyer();
    void retenirNom(QString);

    private:
    QPushButton *aide;
    QPushButton *envoyer;
    QPushButton *quitter;
    QPushButton *about;
    QGridLayout *layoutBouton;

    QLineEdit *nom;
    QLineEdit *prenom;
    QSpinBox *age;
    QFormLayout *layoutCoord;

    QFormLayout *layoutPrinc;

};

#endif


//fenetre.cpp
#include "fenetre.h"

MaFenetre::MaFenetre():QWidget()
{
    setWindowTitle("Exercice avec les layouts");
    setWindowIcon(QIcon("logo.png"));

    QLabel *titre = new QLabel("<center><strong>Formulaire à remplir</strong></center>");
    QLineEdit *nom = new QLineEdit;
    QLineEdit *prenom = new QLineEdit;
    QSpinBox *age = new QSpinBox;
        age->setSuffix(" ans");
        age->setRange(18, 80);
    QFormLayout *layoutCoord = new QFormLayout;

    layoutCoord->addRow(titre);
    layoutCoord->addRow("Votre &nom : ", nom);
    layoutCoord->addRow("Votre &prénom : ", prenom);
    layoutCoord->addRow("Votre â&ge : ", age);


    QPushButton *aide = new QPushButton("aide");
    aide->setCursor(Qt::PointingHandCursor);
    aide->setToolTip("ce bouton vous affiche une aide");

    QPushButton *about = new QPushButton("a Propos");
    about->setCursor(Qt::PointingHandCursor);
    about->setToolTip("ce bouton vous affiche la personne ayant fait ce logiciel");

    QPushButton *envoyer = new QPushButton("envoyer");
    envoyer->setCursor(Qt::PointingHandCursor);
    envoyer->setToolTip("ce bouton vous permet d'envoyer vos données");

    QPushButton *quitter = new QPushButton("quitter");
    quitter->setCursor(Qt::PointingHandCursor);
    quitter->setToolTip("ce bouton vous permet de fermer l'application");

    QGridLayout *layoutBouton = new QGridLayout;

    layoutBouton->addWidget(aide, 0, 0, 1, 1);
    layoutBouton->addWidget(envoyer, 0, 1, 1, 1);
    layoutBouton->addWidget(quitter, 0, 2, 1, 1);
    layoutBouton->addWidget(about, 1, 0, 1, 3);


    QFormLayout *layoutPrinc = new QFormLayout;
    layoutPrinc->addRow(layoutCoord);
    layoutPrinc->addRow(layoutBouton);

    setLayout(layoutPrinc);


    QObject::connect(aide, SIGNAL(clicked()), this, SLOT(messageAide()));
    QObject::connect(quitter, SIGNAL(clicked()), qApp, SLOT(quit()));
    QObject::connect(envoyer, SIGNAL(clicked()), this, SLOT(messageEnvoyer()));
    QObject::connect(about, SIGNAL(clicked()), this, SLOT(messageAbout()));
    QObject::connect(nom, SIGNAL(textChanged(QString)), this, SLOT(retenirNom(QString)));
}


void MaFenetre::retenirNom(QString valeurNom)
{
    if(valeurNom.length()!=0)
    {
         envoyer->setEnabled(true);
    }
    else
    {
        envoyer->setEnabled(false);
    }
}

void MaFenetre::messageAide()
{
    QMessageBox::information(this, "aide", "Il faut remplir les différents champs : <br /><strong>- nom<br />- prénom<br />- âge<br /></strong>et cliquer sur Envoyer");
}

void MaFenetre::messageEnvoyer()
{
    QMessageBox::critical(this, "envoyer", "il est actuellement impossible de stocker les informations recueillies");
}

void MaFenetre::messageAbout()
{
    QMessageBox::about(this, "a Propos", "Ce logiciel a été réalisé par<br /><strong>xxx</strong>");
}
A voir également:

3 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
salut.
ce genre de message, c'est un problème l'allocation mémoire en général.
Je ne vois pas d'erreur là comme ça.
Je trouve juste étrange un slot avec un argument. je ne vois pas comment le programme sait quoi passer à RetenirNom.
du coup il doit y avoir un appel avec un argument vide, ce qui peut créer cette erreur.
1
olivbarb
 
personne ne peut trouver mon erreur ???
0
olivbarb
 
l'argument vient de textChanged(QString)
0