01net    Web


Actuellement en ligne : 143 Utilisateurs dont 8 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> SLOT() pointeur et Qt
Auteur
Message
 
<     1       >
olivier3006
  
   
      ?   ^   @     Posté le 09/06/2008 21:07:06  
Voter pour ce message
Bonjour,

Je suis en train d'apprendre le C++ avec Qt et j'ai un soucis avec un programme que personne n'arrive à résoudre. En fait la compilation se passe bien mais j'ai une erreur d'execution : la fameuse fenêtre windows ... a rencontré un problème et dois fermer ...

Voici mon code
------------------------------------------------------------------------------
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();
}


------------------------------------------------------------------------------
Code :

//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


------------------------------------------------------------------------------
Code :

//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");
envoyer->setEnabled(false);

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>***</strong>");
}
oussama1305
  
   
      ?   @     Posté le 13/08/2008 00:30:07  
Voter pour ce message
Je vois que tu fais les choses en double.
Tes attributs sont déjà déclarés dans ta classe, pourquoi tu les re-déclares dans l'implémentation.
Par exemple:
QSpinBox *age = new QSpinBox;
Il suffit de faire:
age = new QSpinBox;
Car le programme connaît déjà l'attribut.
Edit : Habitude à prendre, pour les lignes de connexion:
QObject::connect(aide, SIGNAL(clicked()), this, SLOT(messageAide()));
Il n'est pas nécessaire de faire à chaque fois :
QObject::
Du moment que ta classe hérite de QWidget qui elle-même hérite de QObject.
-->Message édité par oussama1305 le 13/08/2008 00:32:15<--
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> SLOT() pointeur et Qt

Aller à :

Page générée en : 0.157s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Automobile   
Un Mondial de l'auto sous le signe de l'écologie : découvrez toutes les innovations sur 01men !
Chute des cheveux
Les traitements pour stopper la calvitie : soins capillaires, vitamines, Minoxidil, Propecia