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 :

[débutant] Utiliser un slot pour griser un bouton


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut [débutant] Utiliser un slot pour griser un bouton
    Bonjour,
    je débute en programmation QT.
    Je commence par quelques exemples simples pour voir si je maitrise les éléments de l'application finale avant de me lancer dans un programme plus ambitieux.
    Je bloque sur un problème qui devrait être simple: je cére une fenêtre contanant un qChecbox et un bouton et je souhaiterais que qand je cohe le qCheckbox, le bouton soit désactivé. Voci ce que j'ai tenté :
    fichier 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
     
    #include <QApplication>
    #include <QtGui>
    #include "FenOutil.h"
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        FenOutil F_outil;
        F_outil.show();
     
     
        return app.exec();
    }
    fichier FenOutil.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
     
    #ifndef HEADER_FENOUTIL
    #define HEADER_FENOUTIL
     
    #include <QApplication>
    #include <QtGui>
     
     
     
    class FenOutil : public QWidget
    {
      Q_OBJECT
    	public:
    		FenOutil();
     
      public slots:
        void cliquer(int valeur);
     
    	private:
        QPushButton *bouton;
        QCheckBox *check;
        QGridLayout *layout;
    };
    #endif
    Fichier FenOutil.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
    #include "FenOutil.h"
     
    FenOutil::FenOutil() : QWidget()
    {
     
    //création des widgets
      QPushButton *bouton=new QPushButton("Bouton",this);
      QCheckBox *check=new QCheckBox(this);
      QGridLayout *layout = new QGridLayout;
     
    //création du layout
      layout->addWidget(check,0,0);
      layout->addWidget(bouton,0,1,1,2);
      setLayout(layout);
     
    //gestion des signaux
      QObject::connect(check, SIGNAL(stateChanged(int)), this, SLOT(cliquer(int)));
     
     
    }
     
    void FenOutil::cliquer(int valeur)
    {
      if (valeur==0) bouton->setEnabled(false);
      else bouton->setEnabled(true);
    }
    je n'ai pas de soucis à la compilation, mais quand je clique surle qCheckbox, la fenêtre plante.
    Auriez-vous une piste pour ce problème

    D'avance merci

  2. #2
    Membre expérimenté
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Points : 1 511
    Points
    1 511
    Par défaut
    Ton bouton est déclaré à l'intérieur d'une fonction : ton slot ne voit donc pas le bouton.

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QPushButton *bouton=new QPushButton("Bouton",this);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bouton=new QPushButton("Bouton",this);
    "Il est plus facile de décomposer un problème en ses éléments, forcément plus simples, que de le traiter en sa totalité." (R. Descartes)

    Freelance iOS

  3. #3
    Membre habitué

    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 51
    Points : 178
    Points
    178
    Par défaut
    Ta déclaration des variables dans le .h est bonne mais tu recrés des variable de même nom (bouton, check et layout) dans le contructeur. Du coup ces variables n'ont pas été crées dans la fonction cliquer.
    Avec ceci ca marche mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //création des widgets
      bouton=new QPushButton("Bouton",this);
      check=new QCheckBox(this);
      layout = new QGridLayout;
    Bonne continuation

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Ca fonctionne maintenant, merci pour les réponses rapides

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

Discussions similaires

  1. [Débutant] 3 controles pour griser un bouton
    Par Fennyx dans le forum C#
    Réponses: 3
    Dernier message: 08/04/2015, 12h01
  2. [JSTL] [débutant] Utilisation de jstl pour une internationnalisation
    Par mimil77210 dans le forum Taglibs
    Réponses: 7
    Dernier message: 16/02/2007, 15h57
  3. variable globale pour griser des boutons de commande
    Par ben5985 dans le forum Access
    Réponses: 5
    Dernier message: 24/11/2006, 11h34
  4. Réponses: 3
    Dernier message: 13/06/2005, 12h05
  5. [débutant] 2 alternatives pour un même bouton
    Par pacha1 dans le forum Composants
    Réponses: 5
    Dernier message: 25/06/2004, 11h13

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