SLOT(), pointeur et fonction en C++
olivbarb
-
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
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:
- SLOT(), pointeur et fonction en C++
- Fonction si et - Guide
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
3 réponses
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.
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.