IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Passer QString d'une QDialog vers QMainWindow

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Par défaut Passer QString d'une QDialog vers QMainWindow
    Bonsoir,

    Je suis débutant en Qt et j'ai un petit problème pour passer une variable de type QString déclarée dans une QDialog vers une QMainWindow.

    maQDialog.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include "gestionpoi.h"
    #include <QDialog>
     
    namespace Ui {
    class maQDialog;
    }
     
    class maQDialog: public QDialog
    {
        Q_OBJECT
     
    public:
        explicit maQDialog(QWidget *parent = 0);
        ~baseExistante();
        QString monQStringAPasser;
     
     
    private:
        Ui::maQDialog*ui;
        maQMainWindow* fenetrePrincipale;
    };
    Dans une fonction de ma QDialog, je ferme celle-ci et ouvre ma QmainWindow (dans le .cpp) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this->close();
    fenetrePrincipale= new maQMainWindow();
    fenetrePrincipale->show();
    Dans maQMainWindow.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <QMainWindow>
     
    namespace Ui {
    class maQMainWindow;
    }
     
    class maQMainWindow: public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit maQMainWindow(QWidget *parent = 0);
        ~maQMainWindow();
     
    private:
        Ui::maQMainWindow*ui;
    };
    Enfin, c'est dans maQMainWindow.cpp que j'aimerai récupérer la variable monQStringAPasser de type QString :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include "maQMainWindow.h"
    #include "ui_maQMainWindow.h"
     
    maQMainWindow::maQMainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::maQMainWindow)
    {
        ui->setupUi(this);
    //Ici j'aimerai avoir accès à monQStringAPasser ...
    }
     
    gestionPoi::~gestionPoi()
    {
        delete ui;
    }
    Voilà, j'ai préféré mettre l'intégralité du code pour mieux comprendre mon problème. Ici le code fonctionne, car je ne lui passe rien en paramètre (j'ai essayé plusieurs possiblités, mais je n'y parviens pas ).

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 25
    Par défaut
    Bonsoir,

    Une des possibilité est de passer la QString dans le constructeur de maQMainWindow :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    explicit maQDialog(QString str, QWidget *parent = 0);
    et donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this->close();
    fenetrePrincipale= new maQMainWindow(monQStringAPasser);
    fenetrePrincipale->show();
    Par contre, il me semble que vous avez un problème de conception. Ici, c'est la Dialog qui appelle la fenêtre principale, alors que je pense que c'est plutôt l'inverse qu'il faudrait avoir.

    Je ferais plutot dans maQMainWindow.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    maQDialog dlg = new maQDialog(this);
     
    if (dlg->exec() == QDialog::Accepted) {
        QString str = dlg->monQStringAPasser;
    }
    delete dlg;

    Si quelqu'un pouvait confirmer ?

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Par défaut
    Par contre, il me semble que vous avez un problème de conception. Ici, c'est la Dialog qui appelle la fenêtre principale, alors que je pense que c'est plutôt l'inverse qu'il faudrait avoir.
    En fait, avant d'avoir la fenêtre principale de mon application, il y a un choix à faire (donc une petite fenêtre = Qdialog).

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Par défaut
    En tout cas, cela fonctionne, merci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 25
    Par défaut
    Parfait alors.

    Par contre, je viens de me rendre compte que j'avais fait une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    explicit maQDialog(QString str, QWidget *parent = 0);
    il fallait bien sur lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    explicit maQMainWindow(QString str, QWidget *parent = 0);
    Mais vous avez corriger par vous-même...

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Je tenais juste à dire que vous devriez passer les QString par référence constante là où vous les passer par simple copie.
    Du coup, cela donnerai :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    explicit maQDialog(const QString& str, QWidget *parent = 0);
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passer des variables d'une Page vers un Composant
    Par zooffy dans le forum ASP.NET
    Réponses: 12
    Dernier message: 15/10/2009, 18h34
  2. Réponses: 8
    Dernier message: 10/04/2009, 09h57
  3. Passer un attribut ou parametre d'une servlet vers jsp
    Par Titeuf82 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 03/04/2008, 23h07
  4. Réponses: 4
    Dernier message: 21/02/2008, 04h01
  5. Réponses: 1
    Dernier message: 24/12/2007, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo