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

Qt Discussion :

probleme boutons inopérant


Sujet :

Qt

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut probleme boutons inopérant
    Bonsoir,
    J'ai encore un probleme: lorsque j'apuis sur le bouton "afficher second bouton", il devrai m'afficher le bouton "second bouton" mais rien ne se passe.
    Voici le code :
    fonctiono.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifndef P
    #include <QPushButton>
    #endif
    class bdd : public QPushButton
    {
        public slots:
        void pish(QPushButton &ref);
    };
    fonctiono.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef P
    #include <iostream>
    #include <QApplication>
    #include <QPushButton>
    #include "fonctiono.h"
    using namespace std;
    #endif
     
     
    void bdd::pish(QPushButton &ref)
    {
    ref.show();
    }
    main.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
    #define P
    #include <iostream>
    #include <QApplication>
    #include <QPushButton>
    #include "fonctiono.h"
     
    using namespace std;
     
     
    int main(int argc, char *argv[])
    {
    	QApplication app(argc,argv);
    	QPushButton bouton("afficher second bouton");
    	QPushButton b2("second bouton");
    	bdd objet;
    	bouton.show();
    	QPushButton::connect(&bouton, SIGNAL(clicked()),&objet, SLOT(pish(b2)));
     
    	return app.exec();
     
     
    }
    Pouvez vous m'aider à résoudre ce probleme?

    merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 973
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 973
    Par défaut
    Pei,

    Désolé, j"avais écrit une bêtise, il faut que je vérifie (il y a plus d'un an que je n'ai pas utilisé Qt )

    Déjà, ce n'est ainsi que fonctionnent les "sentinelles" pour les fichiers headers:

    dans le p.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #ifndef P
    #define P
    ...
    #endif
    dans le p.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include tout ce qu'il faut
    #include "p.h"
    ...
    dans le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include tout ce qu'il faut
    #include "p.h"
    ...
    Au passage, P comme nom pour la sentielle, c'est un peu court, et donc potentiellement dangereux, il est si rapide de le réutiliser.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut
    sa arrive

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 973
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 973
    Par défaut
    Fio,

    En vitesse, si ta classe définit des slots ou signals, il faut qu'elle charge la macro
    Q_OBJECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class GG : public QObject
     {
         Q_OBJECT
    ...
     public slots:
         void setValue(int value);
     
     signals:
         void valueChanged(int newValue);
    ...
     };
    Regarde dans la doc ce que ça signifie : il faut traiter ton fichier avec moc

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 973
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 973
    Par défaut
    Dio,

    Bien, voilà : c'est erreur assez courante, car le compilateur ne peut pas vérifier cela:

    Quand on établi une connexion, il faut que le SLOT et le SIGNAL aient le même nombre d'arguments, et que ces arguments aient respectivement le même type.

    Donc, la connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	QPushButton::connect(&bouton, SIGNAL(clicked()),&objet, SLOT(pish(b2)));
    n'est pas valide.

    Il faut que tu définisses un SLOT sans argument pour pouvoir te connecter sur le SIGNAL clicked() d'un QPushButton, qui n'en a pas.

    Tu ne pourras donc pas faire le programme tel que l'as prévu, il faut trouver un autre moyen.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut
    alors j'ai reussi a obtenir quelque chose avec le code suivant mais le probleme c'est que quand je clique sur le premier bouton, le deuxieme aparait puis disparait tres peu de temps apres l'aparition:

    fonctiono.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifndef P
    #include <QPushButton>
    #endif
    class bdd : public QPushButton
    {
        Q_OBJECT
        public slots:
        void pish();
    };
    fonctiono.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
    #ifndef P
    #include <iostream>
    #include <QApplication>
    #include <QPushButton>
    #include "fonctiono.h"
    using namespace std;
    #endif
     
     
    void bdd::pish()
    {
     
        QPushButton b2("second bouton");
    b2.show();
    }
    main.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
    #define P
    #include <iostream>
    #include <QApplication>
    #include <QPushButton>
    #include "fonctiono.h"
     
    using namespace std;
     
     
    int main(int argc, char *argv[])
    {
    	QApplication app(argc,argv);
    	QPushButton bouton("afficher second bouton");
     
    	bdd objet;
    	bouton.show();
    	bouton.connect(&bouton, SIGNAL(clicked()),&objet, SLOT(pish()));
     
    	return app.exec();
     
     
    }

  7. #7
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    C'est normal, quand tu cliques sur ton premier bouton, la fonction bdd::pish() est appelée, elle crée le bouton et l'affiche, mais celui-ci n'a une portée que locale et est détruit quand tu sors de la fonction. Il faudrait plutôt créer ton bouton avec un new et garder le pointeur quelque part pour t'en servir et le détruire.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut
    Oui je suis d'accord mais le probleme c'est que si je créer un pointeur il va falloir que ma fonction pish() contienne un parametre.
    Or si la fonction pish qui est un slot contient des parametre, sa ne fonctionera pas car le signal cliked() a aucun parametre

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 973
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 973
    Par défaut
    Hio,

    Ton objet de type bdd étant un QPushButton, pourquoi ne pas l'afficher lui-même ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void bdd::pish()
    {
        this->setText("second bouton");
        this->show();
    }

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut
    sa fonctionne mais je ne comprend pas trop pourquoi.
    J'ai du zappé le this. En faite je ne voit pas pourquoi c'est un pointeur. Il pointe sur quoi?
    je vais essayé de me renseigner
    merci

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 973
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 973
    Par défaut
    Gio,

    this pointe vers l'objet lui-même. C'est vrai qu'on peut s'en passer, mais je le mets toujours par habitude.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Par défaut
    ok merci pour vos aides
    Bonne fin de journée et joyeux noël

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

Discussions similaires

  1. [HTML] Probleme boutons-images avec firefox
    Par baba_star dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 09/07/2006, 18h49
  2. Probleme bouton + id + css
    Par Seth77 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 11/04/2006, 17h32
  3. probleme bouton radio avec onChange dans formulaire
    Par wil4linux dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/09/2005, 12h26
  4. probleme bouton radio checked
    Par coachbob44 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/04/2005, 11h02
  5. [C#] Probleme bouton et place holder
    Par moimoimoi dans le forum ASP.NET
    Réponses: 12
    Dernier message: 02/04/2004, 13h01

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