C++ : Faire passer des infos entre un QWid...

Résolu/Fermé
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 - 25 oct. 2009 à 17:49
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 - 26 oct. 2009 à 13:20
Bonjour,
Je ne suis pas encore en PRO en C++ et j'aimerais faire passer des infos entre un QWidget et ma fenêtre principale (QMainWindow).
Explications :
J'ai un formulaire (QWidget) où il y a un QLineEdit et un QDoubleSpinBox.
Quand on appuie sur OK, j'aimerais récupérer les infos à partir de ma fenêtre principale.
Quelqu'un connaîtrait-il la bonne technique pour faire cela ??? Merci !

10 réponses

Heu c'est pas bien clair.
Le 'QWidget' appartient à qui ? A la fenêtre principale ou à une autre fenêtre du genre 'QDialog' ?
Le 'QWidget' a quoi sert-il ?
0
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 4
26 oct. 2009 à 07:41
Et bien, finalement, j'ai changer ! : j'ai remplacer mon QWidget par un QDialog, en me disant que j'allais connecter mon QDialog accepted() avec ma fenêtre principale mais, là non plus, j'y arrive pas.

Le 'QWidget' appartient à qui ?
Ben, justement, maintenant, j'ai changer, c'est un QDialog !!!!!

Le 'QWidget' a quoi sert-il ?
C'est un petit formulaire qui demande un nombre, (QDoubleSpinBox), et un nom (QLineEdit).
C'est une fenêtre. (QDialog)
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
26 oct. 2009 à 08:38
En effet, un QDialog est la classe adapté à ce que tu veux faire.
Je peux t'expliquer la méthode que j'utilise et qui fonctionne mais qui n'est peut être pas la meilleure.
En premier lieu, tu crées une méthode dans ta classe que tu dérive de QDialog. Cette méthode aura pour but de retourner tes valeurs.
Ensuite, lorsque tu appelles ton dialogue, tu le fait avec la méthode QDialog::exec() et les lignes du dessous tu récupères le résultat.
0
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 4
26 oct. 2009 à 11:30
WAHOU !?!?!? Attend... tu peut m'expliquer sa en détails s'il te plait ???? Merci !

En premier lieu, tu crées une méthode dans ta classe que tu dérive de QDialog. Cette méthode aura pour but de retourner tes valeurs.
Si j'ai bien compris, il faut que je créer u
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
C'est une excellente méthode, en voici un exemple:
// Dans le programme principal
void MainWindow::btnDialog_clicked()
{
  Dlg dlg (this);
  if (dlg.exec())
    qDebug() << dlg.getSpinBox() << " - " << dlg.getLineEdit();
}

// La classe à déclarer
// Dlg.h
#include <QtGui>
class Dlg : public QDialog
{
  Q_OBJECT

  public:
    DlgDivers(QWidget* parent=0);
    QString getLineEdit(void) { return (lineEdit->text()); }
    int getSpinBox(void) { return (spinBox->value()); }
  private:
    QLineEdit* lineEdit;
    QSpinBox* spinBox;
    QPushButton* btnAnnuler;
    QPushButton* btnOK;
};

// Dlg.cpp
#include "dlgDivers.h"
DlgDivers::DlgDivers(QWidget* parent) : QDialog(parent)
{
  setWindowTitle (trUtf8 ("Essai >>> Dialog <<<"));
  lineEdit = new QLineEdit;
  spinBox = new QSpinBox;
  btnAnnuler = new QPushButton("Annuler");
  btnOK = new QPushButton("OK");
  connect (btnAnnuler, SIGNAL(clicked()), this, SLOT(reject()));
  connect (btnOK     , SIGNAL(clicked()), this, SLOT(accept()));

  QVBoxLayout* vLayout = new QVBoxLayout;
  vLayout->addWidget(lineEdit);
  vLayout->addWidget(spinBox);
  vLayout->addWidget(btnAnnuler);
  vLayout->addWidget(btnOK);
  setLayout(vLayout);
}
Ce n'est qu'un exemple, il reste donc à adapter.
Bonne continuation.
0
Il faut remplacer les DlgDivers par Dlg.
0
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 4
26 oct. 2009 à 11:54
...un QString public et un double public aussi ??? (désolé pour les coupures, quand j'essaye d'envoyer, sa plante)
Du genre :
==========================Fichier dialog.h============================= %
0
Sois plus explicite, je ne comprends pas.
0
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 4
26 oct. 2009 à 12:23
Désolé, sa plante !!!!!!!!!! A chaque fois, j'obtiens un message d'erreur !
avec un code du genre :
2677a.7776.jhh78. (c'est pas le bon, mais je ne m'en souvient plus !!)
0
Tu n'as pas à être désolé.
Donc ça plante à l'exécution... probablement un problème de pointeur...
Le plus simple est d'envoyer ton code A CONDITION QU'IL SOIT INDENTE, pour cela, il y a les balises à droite du 'souligné'.
Sinon, il faut que tu simplifies ton code ou bien que tu le suives par des 'printf' ou mieux par des 'qDebug', sinon il te reste encore le debugger.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
26 oct. 2009 à 12:44
Je crois comprendre que c'est internet qui plante, pas le programme. (si ce n'est pas le cas, tu es effectivement pas clair du tout)
Ce que loupius a mis en public, ce sont des méthodes. Il faut bien mettre des choses en public, sinon la classe n'a pas d'intérêt.
0
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 4
26 oct. 2009 à 13:04
LOL, le problème n'est pas le programme, mais ce site internet (y faisait certainement une mise a jour !).
Par contre, (et là je parle du programme), quand je compile, il me dit :

erreur: invalid use of incomplete type ‘struct QDebug’
erreur: forward declaration of ‘struct QDebug’
attention : inline function ‘QDebug qDebug()’ used but never defined
0
Il ne faut pas oublier:
#include <QtDebug>
Il faut consulter la doc !
0
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 4
26 oct. 2009 à 13:20
C'est bon merci, j'ai modifier la ligne qDebug() << dlg.getSpinBox() << " - " << dlg.getLineEdit();
par QStringList donnes;
donnes << dlg.getSpinBox() << dlg.getLineEdit();
Et ça marche !!!!! Merci à tous !
0