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 :

Paramètres et sous-programmes communs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Par défaut Paramètres et sous-programmes communs
    Bonsoir,

    voila, mon probleme est le suivant :

    j'ai 5 fenetres : ma fenetre principale, une fenetre modale, une fenetre modale cree avec QtDesigner, une fenetre non modale et une fenetre non modale cree avec QtDesigner.
    J'ai cree une classe qtMesParametres pour pouvoir enregistrer param1 a 4 depuis l'une des quatres fenetres.
    Dans chacune de ces fenetres, j'ai placer (entre autre) un lineEditParam1 a 4 pour inscrire le chiffre a sauvegarder et un QPushButton *param3Button a 4.

    Je voudrais afficher les 4 valeurs sauvegardees quand j'ouvre une des quatres fenetres, modifier ces valeurs et les enregistrer de nouveaux graces aux pushbutton.

    voila ce que j'ai fais (et je bloque)

    mon qtMesParametres.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
    #ifndef QTMESPARAMETRES_H
    #define QTMESPARAMETRES_H
    class QtMesParametres
    {
    public:
        QtMesParametres();
        void validParam1();
        void validParam2();
        void validParam3();
        void validParam4();
        int param1, param2, param3, param4;
    private :
    };
    #endif
    mon qtMesParametres.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
    #include "qtMesParametres.h"
    QtMesParametres::QtMesParametres()
    {
    }
    void QtMesParametres::validParam1()
    {
    }
    void QtMesParametres::validParam2()
    {
    }
    void QtMesParametres::validParam3()
    {
    }
    void QtMesParametres::validParam4()
    {
    }
    mon qtParamModal.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 QTPARAMMODAL_H
    #define QTPARAMMODAL_H
     
    #include <QDialog>
     
    QT_BEGIN_NAMESPACE
    class QLineEdit;
    class QLabel;
    QT_END_NAMESPACE
     
    class QtParamModal : public QDialog
    {
        Q_OBJECT
     
    public:
        QtParamModal(QWidget *parent = 0);
     
    private slots:
     
     
    private:
        QLineEdit *lineEditParam1, *lineEditParam2, *lineEditParam3, *lineEditParam4;
        QLabel *textLabelParam1, *textLabelParam2, *textLabelParam3, *textLabelParam4;
        QPushButton *param1Button, *param2Button, *param3Button, *param4Button;
    };
     
    #endif // QTPARAMMODAL_H
    mon mon qtParamModal.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
    #include <QtGui>
     
    #include "qtParamModal.h"
    #include "qtMesParametres.h"
     
    QtParamModal::QtParamModal(QWidget *parent)
        : QDialog(parent)
    {
        setWindowTitle(tr("Fenêtre modale")); // met titre de la fenetre
        setWindowIcon(QIcon(":/Ressources/R2D2.ico")); // Icone de la fenetre declaré dans le fichier resource.
        QPushButton *param1Button = new QPushButton(tr("&Valider Param1"));
        connect(param1Button, SIGNAL(clicked()), this, SLOT(QtMesParametres::validParam1()));
        textLabelParam1 = new QLabel(tr("Param1 :"));
        lineEditParam1 = new QLineEdit();
        QPushButton *param2Button = new QPushButton(tr("&Valider Param2"));
        connect(param2Button, SIGNAL(clicked()), this, SLOT(QtMesParametres::validParam2()));
        textLabelParam2 = new QLabel(tr("Param2 :"));
        lineEditParam2 = new QLineEdit();
        QPushButton *param3Button = new QPushButton(tr("&Valider Param3"));
        connect(param3Button, SIGNAL(clicked()), this, SLOT(QtMesParametres::validParam3()));
        textLabelParam3 = new QLabel(tr("Param3 :"));
        lineEditParam3 = new QLineEdit();
        QPushButton *param4Button = new QPushButton(tr("&Valider Param4"));
        connect(param4Button, SIGNAL(clicked()), this, SLOT(QtMesParametres::validParam4()));
        textLabelParam4 = new QLabel(tr("Param4 :"));
        lineEditParam4 = new QLineEdit();
     
        QGridLayout *mainLayout = new QGridLayout;
        mainLayout->setSizeConstraint(QLayout::SetNoConstraint);
        mainLayout->addWidget(textLabelParam1, 0, 0);
        mainLayout->addWidget(lineEditParam1, 0, 1);
        mainLayout->addWidget(param1Button, 0, 2);
        mainLayout->addWidget(textLabelParam2, 1, 0);
        mainLayout->addWidget(lineEditParam2, 1, 1);
        mainLayout->addWidget(param2Button, 1, 2);
        mainLayout->addWidget(textLabelParam3, 2, 0);
        mainLayout->addWidget(lineEditParam3, 2, 1);
        mainLayout->addWidget(param3Button, 2, 2);
        mainLayout->addWidget(textLabelParam4, 3, 0);
        mainLayout->addWidget(lineEditParam4, 3, 1);
        mainLayout->addWidget(param4Button, 3, 2);
        setLayout(mainLayout);
    }
    et j'ai le(s) message(s) suivant :
    Object::connect: No such slot QtParamModal::QtMesParametres::validParam1() in qtParamModal.cpp:13
    1/ Est-ce que ma classe qtMesParametres est correcte.
    2/ que doisje modifier dans
    connect(param1Button, SIGNAL(clicked()), this, SLOT(QtMesParametres::validParam1()));
    pour que cela marche.
    3/ comment enregistrer param1 a 4 dans qtMesParametres et les afficher a l'ouverture de chaque fenetre.

    je joint le programme complet en piece jointe

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour;

    La fonction connect s'utilise comme suit :

    connect(pointeur_sur_emetteur, SIGNAL(signal()), pointeur_sur_recepteur, SIGNAL/SLOT(symbole_a_appeler()));

    Dans ta façon de faire :

    connect(param1Button, SIGNAL(clicked()), this, SLOT(QtMesParametres::validParam1()));
    tu indique à la fonction que le symbole appelé appartient à la fois à QtParamModal (this) et à QtMesParamètres (QtMesParametres:: ), du coup, il ne sait pas quoi faire .

    Le symbole validParam1() n'appartient pas du tout à QtParamModal (this) mais bien à la classe QtMesParamètres. Il faut donc remplacer le this pas un pointeur sur l'objet qui effectuera le traitement (instance de QtMesParametres) et virer le préfixe du symbole appelé.
    Dernière modification par Invité ; 16/08/2012 à 17h01.

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Par défaut
    Bonjour,

    merci beaucoup,

    je vais y arriver... jammais eu une reponse aussi claire même dans tous les bouquins que j'ai potassé.

    je travaille ça et je reviens vers vous

    Cordialement

  4. #4
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Par défaut
    Bonjour,

    La fonction connect s'utilise comme suit :
    connect(pointeur_sur_emetteur, SIGNAL(signal()), pointeur_sur_recepteur, SIGNAL/SLOT(symbole_a_appeler()));
    Le symbole validParam1() n'appartient pas du tout à QtParamModal (this) mais bien à la classe QtMesParamètres. Il faut donc remplacer le this pas un pointeur sur l'objet qui effectuera le traitement (instance de QtMesParametres) et virer le préfixe du symbole appelé.
    Concretement:
    1/ Mon pointeur_sur_recepteur c'est param1 (de QtParametres) donc je dois remplacer this par : QtMesParametres::param1 ?

    2/ Dans QtParamModal je voudrais avoir lineEditParam1->text() = param1 de QtParametres a l'ouverture de cette fenetre. Je dois passer par une fonction connect, mais avec qu'elle parametres ?

    3/ Dans QtParametres je voudrais avoir param1 = lineEditParam1->text() de QtParamModal si j'appuie sur param1Button de QtParamModal. Je dois passer, là encore, par une fonction connect, mais avec qu'elle parametres ?

    => c'est pour cela que je m'etais dis, je cree une fonction validParam1() qui devrait contenir les instructions pour realiser mon 3 ?

    De plus avec connect, il y a le probleme de coherence des parametres que j'ai du mal a comprendre.

    Bref sur le principe j'ai compris se que tu m'a dit, tant que je reste sur une seule class, je me sert de connect presque sans probleme. Mais la transmission de donner entre deux classes je comprend rien !!!

    cordialement

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Par défaut
    Pour mon 3 :

    dans qtParamModal.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(param1Button, SIGNAL(clicked()), this, SLOT(enrParam1()));
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void QtParamModal::enrParam1()
    {
         QtMesParametres.param1 =  lineEditParam1->text();
    }
    comment acceder a param1 de QtMesParametres ?

    cordialement

  6. #6
    Invité
    Invité(e)
    Par défaut
    Concrètement... pas du tout.

    1) Ton pointeur_sur_récepteur doit pointer un objet qui contient le symbole_a_appeler. ton param1 étant un type primitif, il ne contient pas de tel symbole, en fait ton récepteur est l'objet qui implémente la fonction a effectuer (le slot), donc un objet de type QtMesParametres. Il te faudra donc créer dans ta classe QtMesParametres la fonction slot qui effectuera le traitement adéquat et dont la signature sera le symbole_a_appeler.

    Bien entendu, pour pouvoir connecter un signal à un slot, l'objet qui effectue la connexion (QObject::connect) doit connaître à la fois l'émetteur et le récepteur (le plus souvent, l'un contient un pointeur ou référence de l'autre).

    Si tu veux, tu as un tutoriel sur le sujet sur developpez.com ici.

    2) Est-ce indispensable de passer par un signal, ne peux-tu pas mettre cette instruction dans le constructeur de de ta fenêtre ?

    3) Là, je dirais que pour une bonne conception, lineEdit n'a rien à faire dans la classe QtMesParametres. Mets un setter sur ton param1 pour en modifier la valeur au clic du bouton de QtParamModal.

    Pour conclure, je dirais que les signaux et slots sont fort utiles mais à condition de savoir à peu près ce qu'on fait. Lis les tutos et la doc et repense à ce que doit faire ton programme en considérant ce nouveau savoir.
    Dernière modification par Domi2 ; 18/08/2012 à 07h05. Motif: Lien non pérenne

  7. #7
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2011
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 316
    Par défaut
    Pour le 2 :

    Depuis le debut mon probleme est bien: comment acceder a param1 de QtMesParametres depuis QtParamModal ?

    je pensais, contrairement a ce que tu me dis, qu'il fallait passer par connect !


    Cordialement

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

Discussions similaires

  1. Envoi d'informations dans un sous programme
    Par Tanguy Sarela dans le forum Linux
    Réponses: 3
    Dernier message: 22/12/2005, 16h57
  2. Réponses: 31
    Dernier message: 30/08/2005, 13h10
  3. Réponses: 2
    Dernier message: 04/06/2004, 10h36
  4. [langage] les sous programmes
    Par giverny dans le forum Langage
    Réponses: 6
    Dernier message: 21/07/2003, 19h24
  5. Réponses: 4
    Dernier message: 04/07/2003, 19h13

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