Partage
  • Partager sur Facebook
  • Partager sur Twitter

QFormLayout

    23 mai 2008 à 15:42:00

    bonjour

    je suis en train de me former a c++ et Qt et je trouve le tuto tout a fait au top
    mais.... :-° il y a toujours un mais :D

    comment on recupere les données entrees dans le QFormlayout ?
    car c bien d'afficher un formulaire de saisie, mais c'est mieux de pouvoir utiliser les donnes entrees :o
    (a moins que le tuto ne soit pas fini)
    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2008 à 15:50:04

      comme n'importe quel layout, tu récupères les valeurs entrées avec les pointeurs vers tes widgets :
      QFormLayout *formLayout = new QFormLayout;
      formLayout->addRow(tr("&Nom:"), nameLineEdit);
      formLayout->addRow(tr("&Email:"), emailLineEdit);
      formLayout->addRow(tr("&Age:"), ageSpinBox);
      setLayout(formLayout);
      

      nameLineEdit et les autres sont des variables membres de ta classe donc tu as juste à faire :
      nameLineEdit->text() pour récupérer le nom par exemple.
      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2008 à 19:10:11

        bon... en fait la solution ci dessus marche si tout est dans la meme fenetre.

        dans mon cas j'ai un mainwindwow qui ouvre une fenetre fille de type dialog. Le QFormLayout est dans cette fenetre fille, et c dans le mainwindow que je voudrais exploiter les donnees entree.

        le code de ma fenetre fille :

        le .h
        #ifndef DEF_W_PRODUIT_H
        #define DEF_W_PRODUIT_H
        
        #include <QApplication>
        #include <QtGui>
        #include <QDialog>
        #include <QGridLayout>
        #include <QFormLayout>
        #include <QVBoxLayout>
        #include <QHBoxLayout>
        
        class W_produit : public QDialog
        {
        public:
        	W_produit(QWidget *parent=0);
        
        private:
        	QLineEdit *designation;
        	QLineEdit *masse;
        	QLineEdit *t1st;
        	QLineEdit *tFin;
        	QLineEdit *teneurEau;
        	QLineEdit *traitement;
        
        	QIntValidator *vMasse;
        	QIntValidator *vt1st;
        	QIntValidator *vtFin;
        	QIntValidator *vteneurEau;
        	QIntValidator *vtraitement;
        	
        	QPushButton *closeBtn;
        	QPushButton *cancelBtn;
        
        	QFormLayout *myFormLayout;
        	QHBoxLayout *btnLayout;
        	QVBoxLayout *mainLayout;
        };
        #endif
        


        le .cpp
        #include "w_produit.h"
         
        W_produit::W_produit(QWidget *parent)
        {
        	//setFixedSize(640,480);
        	setWindowTitle(tr("Infos Produits"));
        	
        	// boutons
        	QPushButton *closeBtn = new QPushButton("Valider");
        	QPushButton *cancelBtn = new QPushButton("Annuler");
        
        	// champs de saisie
        	QLineEdit *designation = new QLineEdit;
        	designation->setMaxLength(20);
        	QLineEdit *masse = new QLineEdit;
        	QIntValidator *vMasse = new QIntValidator(0, 10000, this);
        	masse->setValidator(vMasse);
        	QLineEdit *t1st = new QLineEdit;
        	QIntValidator *vt1st = new QIntValidator(-50, 500, this);
        	t1st->setValidator(vt1st);
        	QLineEdit *tFin = new QLineEdit;
        	QIntValidator *vtFin = new QIntValidator(-50, 500, this);
        	tFin->setValidator(vtFin);
        	QLineEdit *teneurEau = new QLineEdit;
        	QIntValidator *vteneurEau = new QIntValidator(0, 100, this);
        	teneurEau->setValidator(vteneurEau);
        	QLineEdit *traitement = new QLineEdit;
        	QIntValidator *vtraitement = new QIntValidator(0, 1, this);
        	traitement->setValidator(vtraitement);
        
        	//layout bouton
        	QHBoxLayout *btnLayout = new QHBoxLayout;
        
        	btnLayout->addWidget(closeBtn);
        	btnLayout->addWidget(cancelBtn);
        
        	//layout formulaire
        	QFormLayout *myFormLayout = new QFormLayout;
        
        	myFormLayout->addRow("&Designation", designation);
        	myFormLayout->addRow("&Masse (Kg)", masse);
        	myFormLayout->addRow("&Température intiale (°C)", t1st);
        	myFormLayout->addRow("Température &finale (°C)", tFin);
        	myFormLayout->addRow("Teneur en &Eau (%)", teneurEau);
        	myFormLayout->addRow("T&raitement :\nCongelation ->0\nRefroidissement ->1", traitement);
        
        	//layout de base
        	QVBoxLayout *mainLayout = new QVBoxLayout;
        	mainLayout->addLayout(myFormLayout);// ajout layout formulaire
        	mainLayout->addLayout(btnLayout);// ajout layout boutons
        	setLayout(mainLayout);// utilisation de mainLayout dans la fenetre
        
        	// Qui ferme la fenetre lorsqu'on clic dessus
        	connect(closeBtn, SIGNAL(clicked()), this, SLOT(accept()));
        	connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));
        
        }
        


        si dans le mainwindow je fait resultat = W_produit::masse->text(), j'ai une erreur a la compilation (masse etant private)
        je vois pas comment faire.
        • Partager sur Facebook
        • Partager sur Twitter
          27 mai 2008 à 10:06:13

          c'est cool de voir que personne ne se preocupe de m'aider, meme en me disant qu'on ne comprends pas.

          -1 pour l'aide

          :(
          • Partager sur Facebook
          • Partager sur Twitter
            27 mai 2008 à 14:10:16

            dans ton W_produit, tu peux faire des accesseurs, hein ^^
            genre :

            QString W_produit::getDesignation() {
            	return designation->text();
            }
            


            Et autres.
            • Partager sur Facebook
            • Partager sur Twitter
            Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
              27 mai 2008 à 16:05:56

              merci de ta reponse

              mais si je comprends bien ton exemple, le return ne renvoi q'un champ.
              ce que je voudrais faire, c'est de mettre a jour tous les parametre en cliquant sur valider. La j'essaye de passer un pointeur a la fenetre w_produit, pointant sur la classe qui doit recevoir ces parametres.

              a suivre ..... :-°
              • Partager sur Facebook
              • Partager sur Twitter

              QFormLayout

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown