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 :

Récupérer une variable d'une classe dans une autre

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut Récupérer une variable d'une classe dans une autre
    Bonjour/Bonsoir

    Depuis quelques jours j'ai commencé a apprendre Qt en faisant plusieurs programmes et en suivant des cours sur open classroom et autres..
    Ca fait maintenant depuis hier que je bloque sur quelque chose qui me paraissait pourtant simple, recuperer une variable d'une class pour l'afficher dans une autre avec des accesseurs.
    Code :

    form_connexion.cpp

    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
    22
    23
    24
    25
    26
    27
     
     
    #include "form_connexion.h"
    #include "form_plateform.h"
    #include <QWidget>
    #include <QGridLayout>
    #include <QApplication>
    #include <QThread>
    #include <QShowEvent>
    #include <QDebug>
     
    ...
     
    //Inputs
        name_input = new QLineEdit(this);
        pass_input = new QLineEdit(this);
     
        name_input->setFixedSize(150,25);
        pass_input->setFixedSize(150,25);
     
        pass_input->setEchoMode(QLineEdit::Password);
     
    ...
     
    QString form_connexion::getName(){
        return name_input->text();
    }
    form_connexion.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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    #ifndef FORM_CONNEXION_H
    #define FORM_CONNEXION_H
     
    #include <QMainWindow>
    #include <QWidget>
    #include <QPushButton>
    #include <QLabel>
    #include <QLayout>
    #include <QGridLayout>
    #include <QHBoxLayout>
    #include <QLineEdit>
    #include <QString>
     
    class form_connexion : public QWidget
    {
        Q_OBJECT
    public:
        form_connexion();
     
    private:
        QPushButton *btn_connexion;
        QPushButton *btn_signup;
     
        QLabel *title;
        QLabel *text1;
        QLabel *text2;
     
        QLabel *name_acc;
     
        QGridLayout *panel_co;
        QGridLayout *panel_form;
     
        QHBoxLayout *title_lay;
        QHBoxLayout *btn_lay;
     
        QLineEdit *name_input;
        QLineEdit *pass_input;
     
    public slots:
        void connexionToPlat();
        void checkInputs();
        void openAnimForm();
        void closeAnimForm();
     
        QString getName();
     
    signals:
        void emitOAF();
        void emitCAF();
    };
     
    #endif // MAINWINDOW_H
    Donc la c'était la class où la variable en question s'y trouve : name_input (qui est un QLabel)

    et je voudrais retrouver sa valeur ici :

    form_plateform.cpp

    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
    22
    23
    24
    25
    26
    27
    28
     
     
    #include "form_plateform.h"
    #include "form_connexion.h"
    #include <QMainWindow>
    #include <QtWidgets>
     
    form_plateform::form_plateform()
    {
        //FORM SETTINGS
        setFixedSize(1200,700);
        setWindowFlags(Qt::FramelessWindowHint);
     
        QPixmap bg(":/bgs/bg3");
        bg = bg.scaled(this->size(), Qt::IgnoreAspectRatio);
     
        QPalette palette;
        palette.setBrush(QPalette::Background, bg);
     
        this->setPalette(palette);
     
        //Labels
     
        form_connexion *co = new form_connexion;
     
        txt1 = new QLabel("name :" + co->getName(), this);
        txt1->show();
    }
    form_plateform.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
    22
    23
    24
    25
    26
    27
     
     
    #ifndef FORM_PLATEFORM_H
    #define FORM_PLATEFORM_H
     
    #include <QObject>
    #include <QDialog>
    #include <QWidget>
    #include <QLabel>
     
    class form_plateform : public QWidget
    {
        Q_OBJECT
     
    public:
        form_plateform();
     
        QLabel *txt1;
    public slots:
        void getAccountConnected();
    signals:
     
    private:
     
    };
     
    #endif // FORM_PLATEFORM_H
    Le text de name_input est remplit par l'utilisateur une fois le programme lancé.
    Je sais pas si c'est la fonction qui est mal appelé ou si elle m'envoie une valeur null.. je dois surement passer a côté de quelque chose de simple mais la j'avoue rester bête.
    Merci de votre aide et passez une bonne journée/soirée!

  2. #2
    Membre confirmé
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Par défaut
    Salut,
    ton code est assez confus, je n'ai pas bien compris ce que tu veux faire exactement...
    Si tu veux récupérer des données d'un dialogue par exemple le mieux est de passer par des signaux / slots
    Maintenant si tu lances une fenetre1 et que cette fenetre1 lance elle même une fenetre2 tu peux utiliser les accesseurs effectivement. Mais il faudra une action dans la fenetre1 (ou au moins une ligne de code) pour lancer la fonction accesseur et récupérer ta donnée.
    L'avantage des signaux / slots c'est que c'est la fenetre2 qui émet la donnée quand elle est prête ou à la demande et la fenetre1 est en attente permanente de l'émission de ce signal pour capter la donnée et la traiter.
    Peux tu nous en dire plus sur ce que tu veux obtenir exactement?
    Bon courage

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut
    Bonjour,

    Oui je viens de me rendre compte que c'est un peu confus la manière dont je l'ai expliqué
    Alors voila :
    Quand je lance mon application il y a cette fenetre :
    http://prntscr.com/kzvwq3

    Le code de la fenetre (en entier cette fois ci : ):

    .cpp

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
     
    #include "form_connexion.h"
    #include "form_plateform.h"
    #include <QWidget>
    #include <QGridLayout>
    #include <QApplication>
    #include <QThread>
    #include <QShowEvent>
    #include <QDebug>
     
    form_connexion::form_connexion()
    {
        //FORM SETTINGS    
        setFixedSize(300,400);
        setWindowFlags(Qt::FramelessWindowHint);
        setWindowOpacity(1);
     
        QPixmap bg(":/bgs/bg1");
        bg = bg.scaled(bg.size() / 2, Qt::IgnoreAspectRatio);
     
        QPalette palette;
        palette.setBrush(QPalette::Background, bg);
     
        this->setPalette(palette);
     
        //Btn
        btn_connexion = new QPushButton("Connexion", this);
        btn_signup = new QPushButton("Register", this);
     
        btn_connexion->setFixedSize(100, 25);
        btn_signup->setFixedSize(100, 25);
     
        btn_connexion->setEnabled(false);
     
        //Texts
        title = new QLabel("LogIn / SignUp", this);
        title->setAlignment(Qt::AlignCenter);
        title->setFixedSize(100,25);
     
        text1 = new QLabel("Nickname : ", this);
        text2 = new QLabel("Password : ", this);
     
        //Inputs
        name_input = new QLineEdit(this);
        pass_input = new QLineEdit(this);
     
        name_input->setFixedSize(150,25);
        pass_input->setFixedSize(150,25);
     
        pass_input->setEchoMode(QLineEdit::Password);
     
        //Strings
        name_acc = new QLabel("", this);
     
        //Layout
        panel_form = new QGridLayout(this);
     
        title_lay = new QHBoxLayout(this);
        btn_lay = new QHBoxLayout(this);
     
        panel_co = new QGridLayout(this);
     
        panel_form->addLayout(title_lay, 0, 0);
        panel_form->addLayout(panel_co, 1, 0, Qt::AlignCenter);
        panel_form->addLayout(btn_lay, 2, 0);
     
        panel_co->addWidget(text1, 0, 0, Qt::AlignRight);
        panel_co->addWidget(text2, 1, 0, Qt::AlignRight);
     
        panel_co->addWidget(name_input, 0, 1, Qt::AlignLeft);
        panel_co->addWidget(pass_input, 1, 1, Qt::AlignLeft);
     
        btn_lay->addWidget(btn_connexion, Qt::AlignBottom);
        btn_lay->addWidget(btn_signup, Qt::AlignBottom);
     
        title_lay->addWidget(title);
     
        //EVENTS
     
        connect(name_input, SIGNAL(textChanged(const QString &)), this, SLOT(checkInputs()));
        connect(pass_input, SIGNAL(textChanged(const QString &)), this, SLOT(checkInputs()));
        connect(btn_connexion, SIGNAL(clicked()), this, SLOT(connexionToPlat()));
        connect(this, SIGNAL(emitCAF()), this, SLOT(closeAnimForm()));
     
    }
     
    void form_connexion::connexionToPlat(){
     
        //Check if account exists in database
        //--
     
        //IF EXISTS
     
        //initialize a new instance of form_plateform
     
        form_plateform *pf = new form_plateform;
        pf->show();
        //Get the name account
     
        //Close form_connexion
        emit emitCAF();
        this->hide();
    }
    void form_connexion::checkInputs(){
        if(name_input->text().length() > 4 && pass_input->text().length() > 5){
            btn_connexion->setEnabled(true);
        }else{
            btn_connexion->setEnabled(false);
        }
    }
    void form_connexion::openAnimForm(){
        double opa = 0.1;
     
        while(opa < 1.0){
            opa = opa + 0.05;
            QThread::msleep(20);
            setWindowOpacity(opa);
        }
    }
    void form_connexion::closeAnimForm(){
        double opa = 1;
     
        while(opa > 0.0){
            opa = opa - 0.05;
            QThread::msleep(20);
            setWindowOpacity(opa);
        }
    }
    QString form_connexion::getName(){
        return name_input->text();
    }
    .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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
    #ifndef FORM_CONNEXION_H
    #define FORM_CONNEXION_H
     
    #include <QMainWindow>
    #include <QWidget>
    #include <QPushButton>
    #include <QLabel>
    #include <QLayout>
    #include <QGridLayout>
    #include <QHBoxLayout>
    #include <QLineEdit>
    #include <QString>
     
    class form_connexion : public QWidget
    {
        Q_OBJECT
    public:
        form_connexion();
     
    private:
        QPushButton *btn_connexion;
        QPushButton *btn_signup;
     
        QLabel *title;
        QLabel *text1;
        QLabel *text2;
     
        QLabel *name_acc;
     
        QGridLayout *panel_co;
        QGridLayout *panel_form;
     
        QHBoxLayout *title_lay;
        QHBoxLayout *btn_lay;
     
        QLineEdit *name_input;
        QLineEdit *pass_input;
     
    public slots:
        void connexionToPlat();
        void checkInputs();
        void openAnimForm();
        void closeAnimForm();
     
        QString getName();
     
    signals:
        void emitOAF();
        void emitCAF();
    };
    Voila, et après avoir appuyé sur "connexion", cette première fenetre passe en "hide" et ouvre une seconde fenetre "form_plateform", son code :

    .cpp
    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
    22
    23
     
     
    form_plateform::form_plateform()
    {
        //FORM SETTINGS
        setFixedSize(1200,700);
        setWindowFlags(Qt::FramelessWindowHint);
     
        QPixmap bg(":/bgs/bg3");
        bg = bg.scaled(this->size(), Qt::IgnoreAspectRatio);
     
        QPalette palette;
        palette.setBrush(QPalette::Background, bg);
     
        this->setPalette(palette);
     
        //Labels
     
        form_connexion co;
     
        txt1 = new QLabel("name : " + co.getName(), this);
        txt1->show();
    }
    .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
    22
    23
    24
    25
     
     
    #ifndef FORM_PLATEFORM_H
    #define FORM_PLATEFORM_H
     
    #include <QObject>
    #include <QDialog>
    #include <QWidget>
    #include <QLabel>
     
    class form_plateform : public QWidget
    {
        Q_OBJECT
     
    public:
        form_plateform();
     
        QLabel *txt1;
    public slots:
     
    signals:
     
    private:
     
    };
    et voici a quoi elle ressemble :
    http://prntscr.com/kzvy15

    dans le script de form plateform j'essaie de récuperer le texte de "name_input" via "form_connexion::getName()" mais je ne récupère rien (sur le screen ci dessus : "Name : " + la valeur name_input, qui ne donne rien)
    Voila alors je sais pas si c'est le fait que la fonction qui récupère la valeur est mal appelé, ou qu'on doit procédé autrement.

    Merci de ta précédente réponse sinon!

    EDIT: main.cpp (au cas ou) :

    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 "plateform.h"
    #include "form_connexion.h"
    #include "form_plateform.h"
     
    #include <QApplication>
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        form_connexion *form_c = new form_connexion;
        form_c->show();
     
        return app.exec();
    }

  4. #4
    Membre confirmé
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Par défaut
    Bonjour,

    en fait, c'est plus simple que ce que je pensais, je n'avais effectivement pas toutcompris dans ton premier post.
    Il suffit de passer la variable en argument lors de la creation de ta classe form_plateform comme ceci par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class form_plateform : public QWidget
    {
        Q_OBJECT
        QString uneVariableBidon // c'est automatiquement du private inutile de le préciser si tu veux 
     
    public:
        explicit form_plateform(QString maVariable,QWidget *parent=0);
        ~form_plateform();
     
    public slots:
        void monSlotAction1(QString s);
     
    };
    Il te suffit alors de lancer cette classe qui affichera ton formulaire form_plateform avec en argument la variable QString que tu veux et son widget parent.
    comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    form_plateform *pf = new form_plateform(maVariableATransmettre,this);
    pf->show();
    Voilà je ne vais pas plus rentrer dans ton code histoire de te laisser te familiariser avec tout ça.
    Si tu n' y arrives pas fais signe.
    Bon courage.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour ton form_connexion, hérite plutôt de la classe QDialog. Cette classe est faite pour ça. Sa fonction membre exec() est bloquante et permet de patienter au niveau de son appel jusqu'au moment où l'utilisateur ferme la fenêtre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MyDialog dialog{/* éventuels paramètres */};
    if (dialog.exec() == QDialog::Accepted) {
        QString name = dialog.getName();
        // …
    }
    Tu peux dès lors dans les « … » construire ton form_plateform en passant le paramètre name. (Mais évitons les pointeurs inutiles .)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Par défaut
    Bonsoir,

    Désolé de ma réponse tardive mais je n'ai pas pu répondre avant!
    Sinon j'ai bien testé la solution avec la variable en paramètre de form_plateform et ca marche
    Pour l'autre solution (QDialog) je n'ai pas réussi a comprendre son fonctionnement mais je vais étudier tout ca.

    Dans tous les cas merci de votre aide et passez une bonne semaine!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/05/2014, 10h23
  2. Réponses: 3
    Dernier message: 13/12/2009, 17h04
  3. Réponses: 40
    Dernier message: 21/06/2007, 17h58
  4. [MySQL] récupérer dans une boucle chaque information MySQL dans une variable différente
    Par gtenthorey dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2007, 22h34
  5. Réponses: 1
    Dernier message: 17/01/2007, 21h52

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