Bonjour,
J'aimerai afficher un formulaire dynamique dans une fenêtre (en cliquant sur un bouton on rajoute un ligne, et en appuyant sur un autre bouton on efface une ligne).
J'ai crée une classe fenêtre qui sert juste à contenir les Widget.
Une classe champ qui contient les différent champ pour décrire une personne (nom prénom adresse age )
Une classe formulaire qui contient plusieurs champ + 2 boutons pour agrandir/rétrécir le formulaire.
Si j'ai mis un pointeur vers la fenêtre principale dans la classe formulaire c'est pour contourner le fait que les signaux et les slot doivent avoir les même argument.
J'avais réussi à le faire pour un seul widget et j'ai donc adapté le code pour le formulaire... sauf que le signal/slot ne fonctionne pas(j'ai remplacé le code de la fonction ajoute_champ() par un QMessageBox::information(le code) et rien n'est apparu ).
Fichier main.cpp
champ.hCode:#include <QApplication> #include <QtGui> #include "fenetre.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); fenetre win(5);//j'initialise le nombre de ligne à 5 win.show(); return app.exec(); }
champ.cppCode:#ifndef CHAMP_H #define CHAMP_H #include <QApplication> #include <QtGui> class champ { public: champ(QWidget *pointeur_fenetre,qint32 i); void affiche(); private: QLineEdit *m_nom; QLineEdit *m_prenom; QLineEdit *m_adresse; QSpinBox *m_age; }; #endif // CHAMP_H
formulaire.hCode:#include "champ.h" champ::champ(QWidget* pointeur_fenetre, qint32 i ) { m_nom=new QLineEdit("Entrez votre nom",pointeur_fenetre); m_prenom=new QLineEdit("Entrez votre prenom",pointeur_fenetre); m_adresse=new QLineEdit("Entrez votre adresse",pointeur_fenetre); m_age=new QSpinBox(pointeur_fenetre); m_nom->move(20,40+50*i); m_prenom->move(200,40+50*i); m_adresse->move(380,40+50*i); m_age->move(560,40+50*i); } void champ::affiche() { m_nom->show(); m_prenom->show(); m_adresse->show(); m_age->show(); }
formulaire.cppCode:#ifndef FORMULAIRE_H #define FORMULAIRE_H #include <QApplication> #include <QtGui> #include "champ.h" #include "fenetre.h" class champ; class fenetre; class formulaire: public QWidget { Q_OBJECT public: formulaire(qint32 taille, fenetre *pointeur_fenetre); public slots: void ajoute_champ(); void enleve_champ(); private: QVector<champ*> m_formulaire; QPushButton* m_ajoute; QPushButton* m_enleve; fenetre* pointeur; }; #endif // FORMULAIRE_H
fenetre.hCode:#include "formulaire.h" formulaire::formulaire(qint32 taille,fenetre* pointeur_fenetre) { this->pointeur=pointeur_fenetre; qint32 i; for(i=0;i<taille;i++) { champ* champ_i = new champ(pointeur_fenetre,i); m_formulaire.push_back(champ_i); } m_ajoute= new QPushButton("ajouter",this->pointeur); m_ajoute->move(10,10); m_enleve= new QPushButton("effacer",this->pointeur); m_enleve->move(200,10); QObject::connect(m_ajoute,SIGNAL(clicked()), this, SLOT(ajoute_champ())); QObject::connect(m_enleve,SIGNAL(clicked()), this, SLOT(enleve_champ())); } void formulaire::ajoute_champ() { qint32 taille; taille=m_formulaire.size(); champ* champ_i=new champ(this->pointeur,taille); m_formulaire.push_back(champ_i); champ_i->affiche(); } void formulaire::enleve_champ() { qint32 taille; taille=m_formulaire.size(); if(taille>1) { delete m_formulaire[taille-1]; m_formulaire.erase(m_formulaire.begin()+taille-1); } }
fenetre.cppCode:#ifndef FENETRE_H #define FENETRE_H #include <QApplication> #include <QtGui> #include "formulaire.h" class formulaire; class fenetre: public QWidget { Q_OBJECT public: fenetre(qint32 i); }; #endif // FENPRINCIPALE_H
Code:#include "fenetre.h" fenetre::fenetre(qint32 i) { formulaire form(i,this); }
Merci d'avance
-----