Je suis débutant sur QT comme vous vous en doutez vu le niveau de ma question, mais voila, j'ai lu le tuto "Programmez avec le language cpp" et dans la partie QT, je n'arrive pas à récupérer les valeurs de QFormLayout, je m'explique :
Voici mon créateur :
fenetre_questionnaire1::fenetre_questionnaire1() : QWidget()
{
QLineEdit *m_nom = new QLineEdit;
QFormLayout *layout = new QFormLayout;
layout->addRow("Quel est le nom du détenteur du compte ?", m_nom);
QVBoxLayout *layoutPrincipal = new QVBoxLayout;
layoutPrincipal->addLayout(layout);
QPushButton * boutonOk = new QPushButton("OK");
QPushButton *boutonRetour = new QPushButton("Annuler");
QWidget::connect(boutonOk, SIGNAL(clicked()), this , SLOT(creation_porte_feuille()));
QWidget::connect(boutonRetour, SIGNAL(clicked()), this, SLOT(close()));
layoutPrincipal->addWidget(boutonRetour); // Ajout du bouton
layoutPrincipal->addWidget(boutonOk);
this->setLayout(layoutPrincipal);
this->show();
}
Qui, de manière simple, demande è l'utilisateur son nom, et le stock dans m_nom
La fonction creation_en_tete() me permet d'ecrire en gros les données que j'ai lu (ici en raccourci m_nom dans le QFormLayout).
Comme vous l'aurez surement compris j'ai mis m_nom en attribut mais malheureusement cela ne modifie pas sa valeur.
Comment dois-je faire ? sachant que à la base la seule chose que je désire faire c'est donc écrire dans une fichier (à l'aide de la derniere ligne) le m_nom donné par l'utilisateur.
dans l'attente d'une ame charitable
- Edité par ThomasDubois22 11 juillet 2019 à 23:13:13
Peux-tu préciser le constructeur de ta classe Personne svp ?
De ce que je lis, dans ton slot, tu passes à cette classe deux paramètres de type QLineEdit (pas de m_prenom dans ton 1er code, il est ailleurs ou bien oublié ?). Ma question est donc : est-ce que tu souhaites véritablement passer ces types là, ou bien souhaites-tu passer en paramètres du constructeur de Personne des QString (ou des std::string) ?
Si la réponse est le 2ème cas, alors il faut que tu accèdes aux valeurs de tes composants via les méthodes disponibles (setText() pour ajouter du texte, et, en l’occurrence ce qui t'intéresse, text() pour récupérer l'information écrite par tes utilisateurs).
++
Si ça n'explose pas, alors ce n'est pas intéressant.
J'avais déjà en effet bien un problème de conversion entre QLineEdit et QString, j'ai réglé ce problème mais ca ne marche toujours pas.. et le probleme vient bien de l'enregistrement des données de QLineEdit donc donées par l'utilisateur. En effet, jai changé un peu mon code pour qu'il soit plus lisible pour vous :
#include "fenetre_questionnaire1.h"
#include "personne.h"
#include "porte_feuille.h"
#include <QWidget>
#include <QLineEdit>
#include <QFormLayout>
#include <QPushButton>
#include <QString>
fenetre_questionnaire1::fenetre_questionnaire1() : QWidget()
{
QLineEdit *nom = new QLineEdit;
QLineEdit *prenom = new QLineEdit;
QFormLayout *layout = new QFormLayout;
layout->addRow("Quel est le nom du détenteur du compte ?", nom);
layout->addRow("Quel est le prénom du détenteur du compte ?", prenom);
m_nom = nom->text();
m_prenom = prenom->text();
QVBoxLayout *layoutPrincipal = new QVBoxLayout;
layoutPrincipal->addLayout(layout);
QPushButton * boutonOk = new QPushButton("OK");
QPushButton *boutonRetour = new QPushButton("Annuler");
QWidget::connect(boutonOk, SIGNAL(clicked()), this , SLOT(creation_porte_feuille()));
QWidget::connect(boutonRetour, SIGNAL(clicked()), this, SLOT(close()));
layoutPrincipal->addWidget(boutonRetour);
layoutPrincipal->addWidget(boutonOk);
this->setLayout(layoutPrincipal);
this->show();
}
void fenetre_questionnaire1::creation_porte_feuille(){
QMessageBox::critical(nullptr,"données",m_nom + m_prenom);
}
je lance le constructeur, cela affiche la fenetre QFormLayout avec les bouttons Ok et annuler, j'écris les données pour m_prenom et m_nom, j'appuie sur Ok ce qui lance le slot creation_porte_feuille() qui affiche alors le QMessageBox qui est vide, m_nom et m_prenom sont donc, j'imagine, vides!
Tu imagines affiche la sortie avec qDebug() comme j’ai repris au dessus et n'oublie pas d'inclure QDebug dans le header. Ça va t'afficher le contenu de m_prenom et m_nom. Comme ça tu seras sûr !
> (1) je lance le constructeur, cela affiche la fenetre QFormLayout avec les bouttons Ok et annuler, (2) j'écris les données pour m_prenom et m_nom, j'appuie sur Ok ce qui lance le slot creation_porte_feuille() qui affiche alors le QMessageBox qui est vide
1) À ce stade, m_prenom et m_nom sont vides. Les fenêtres n’apparaîtront qu'après la fin de fenetre_questionnaire1.
2) tu écris dans les QLineEdit, c'est à creation_porte_feuille d'en extraire les noms.
m_prenom et m_nom devrait être les QLineEdit.
Au passage, SLOT et SIGNAL sont des vieilleries, utilise la "nouvelle" syntaxe. Entre guillemet, parce que je suis pas sûr qu'une syntaxe qui a déjà 6 ans puisse être appelée nouvelle...
Merci beaucoup @jo_link_noir c'est beaucoup plus clair pour moi et en effet ca fonctionne!!
Je pense avoir compris comment ca fonctionne grace à toi!
Je ne connaissait pas la deuxieme méthode que tu explique pour les slots, merci encore!
Acceder aux reponses de 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.
Si ça n'explose pas, alors ce n'est pas intéressant.