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

Résolu
duchnoki Messages postés 158 Date d'inscription   Statut Membre Dernière intervention   -  
duchnoki Messages postés 158 Date d'inscription   Statut Membre Dernière intervention   -
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

loupius
 
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   Statut Membre Dernière intervention   4
 
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   4
 
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
loupius
 
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
loupius
 
Il faut remplacer les DlgDivers par Dlg.
0
duchnoki Messages postés 158 Date d'inscription   Statut Membre Dernière intervention   4
 
...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
loupius
 
Sois plus explicite, je ne comprends pas.
0
duchnoki Messages postés 158 Date d'inscription   Statut Membre Dernière intervention   4
 
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
loupius
 
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   4
 
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
loupius
 
Il ne faut pas oublier:
#include <QtDebug>
Il faut consulter la doc !
0
duchnoki Messages postés 158 Date d'inscription   Statut Membre Dernière intervention   4
 
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