Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] Radiobutton

    16 avril 2008 à 14:57:12


    Bonjour,

    voila mon problème, j'ai créé 2 radio boutons dont je met un a vrai par défaut lors de sa création
    MaFenetre::MaFenetre() : QWidget()
    {
        setFixedSize(300, 180);    
                
        amis = new QRadioButton("Ami(e)s", this);
        amis->move( 50, 10);
        amis->setChecked(true);
    
        famille = new QRadioButton("Famille", this); 
        famille->move( 120, 10);
    
        ...
    


    Or dans la suite du programme lorsque je veux vérifier lequel de mes 2 boutons est activé il me renvoie toujours le meme bouton (amis) meme si c'est l'autre qui a été activé !!!

    void MaFenetre::ouvrirRep()
    {
        ok1 = false;
        ok1 = amis->isCkecked();
         monrep.show();
    }
    


    En bref ok1 est toujours vrai meme si le bouton amis n'est pas séléctionné.

    Une méthode doit m'échapper donc si vous avez une solution...
    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      16 avril 2008 à 15:35:27

      Il faudrait voir plus de code, si tu veux de l'aide. ;)

      En attendant voici un exemple qui fonctionne :
      // main.cpp
      
      #include <QApplication>
      
      #include "mywidget.h"
      
      int main (int argc, char * argv[]) {
          QApplication app(argc,argv);
      	
      	MyWidget widget;
      	widget.show();
      	
          return app.exec();
      }
      
      // mywidget.h
      
      #ifndef MYWIDGET_H
      #define MYWIDGET_H
      
      #include <QWidget>
      
      class QLineEdit; class QRadioButton;
      
      class MyWidget : public QWidget {
      
      Q_OBJECT
      
      public:
      	MyWidget(QWidget *parent = NULL);
      private:
      	QLineEdit *displayer;
      	QRadioButton *rb;
      public slots:
      	void Display();
      
      };
      
      #endif
      
      // mywidget.cpp
      
      
      #include "mywidget.h"
      
      #include <QApplication>
      #include <QWidget>
      #include <QPushButton>
      #include <QLineEdit>
      #include <QRadioButton>
      #include <QVBoxLayout>
      
      
      MyWidget::MyWidget(QWidget *parent) : QWidget(parent) {
      	
      	rb = new QRadioButton();
      	rb->setChecked(true);
      	
      	QPushButton *display = new QPushButton(tr("Display"));
      	 
      	displayer = new QLineEdit();
      	
      	QVBoxLayout *layout = new QVBoxLayout();
      	layout->addWidget(rb);
      	layout->addWidget(display);
      	layout->addWidget(displayer);
      	setLayout(layout);
      	
      	connect(display,SIGNAL(clicked()),this,SLOT(Display()));
      	
      }
      void MyWidget::Display() {
      	if(rb->isChecked())displayer->setText("the button is checked");
      	if(!rb->isChecked())displayer->setText("the button isn't checked");
      
      }
      


      • Partager sur Facebook
      • Partager sur Twitter
        16 avril 2008 à 16:46:48

        Merci pour ton exemple mais dans ton cas tu n'as qu'un seul bouton radio or j'en ai deux dans mon exemple. Enfin j'ai tout de meme essayé avec ton exemple voir si je pouvais trouver une solution mais non rien.

        Voici mon code en entier defois, peut etre y verras tu l'erreur

        Fenetre.cpp
        #include <QStringList>
        #include <QFontDialog>
        #include <QColorDialog>
        #include <QFileDialog>
        #include <QStack>
        
        #include "FichePerso.h"
        #include "MaFenetre.h"
        #include "Repertoire.h"
        
        MaFenetre::MaFenetre() : QWidget()
        {
            setFixedSize(300, 180);    
                
            amis = new QRadioButton("Ami(e)s", this);
            amis->move( 50, 10);
            amis->setChecked(true);
            famille = new QRadioButton("Famille", this); 
            famille->move( 120, 10);
        
            
            m_ChercherPerso = new QPushButton("    Chercher un profil   ", this);
        //    m_ChercherPerso->setFont(QFont("Comic Sans MS", 10));
            m_ChercherPerso->setGeometry(20, 105, 200, 70);
            m_ChercherPerso->setIcon(QIcon("photos/chevalier.png"));
            m_ChercherPerso->setIconSize(QSize(60,60));
            QObject::connect(m_ChercherPerso, SIGNAL(clicked()), this, SLOT(ouvrirRep()));   
            
            m_quitter = new QPushButton("Quitter", this);
            m_quitter->setFixedSize(50, 20);
            m_quitter->setFont(QFont("Comic Sans MS", 8));
            m_quitter->setCursor(Qt::PointingHandCursor);
            m_quitter->move(250, 160);
            // Connexion du clic du bouton à la fermeture de l'application
            QObject::connect(m_quitter, SIGNAL(clicked()), qApp, SLOT(quit())); 
        
        }
        
        void MaFenetre::ouvrirRep()
        {    
            if (famille->isChecked()) ok1 = false;
            else ok1 = true;
            monrep.show();
        }
        
        bool MaFenetre::getok() const
        {
             return ok1;
        }
        


        Et voici la partie ou j'aimerais utiliser ma variable "ok1" :

        Repertoire::Repertoire() : QWidget()
        {                        
            setFixedSize(300, 180);
        
        /************************ Recherche de la personne ***************************/
          
            b_prenom_ch = new QPushButton("Prenom", this);
            bouton(b_prenom_ch, 210, 5);
            QObject::connect(b_prenom_ch, SIGNAL(clicked()), this, SLOT(recherchePrenom()));
            
        /************************ Affichage de la personne ***************************/
            
        
            m_rprenom = new QLineEdit(this);
            affichage(m_rprenom, 100, 80, t_prenom, "Prénom : ", 50, 84);
              
        
        /************************ Fermeture de la fenetre ***************************/
                
            m_quitter3 = new QPushButton("Menu", this);
            bouton(m_quitter3, 250, 160, 50, 20);
            connect(m_quitter3, SIGNAL(clicked()), this, SLOT(fermeture()));
        }
        
        /************************ Méthodes ***************************/
        
        void Repertoire::recherchePrenom()
        {
              int nbl;
              bool oki = MaFenetre().getok();
              if (oki)                
               nbl = 1;
              else 
               nbl = 4;
               
               for (int i=0;i<=nbl;i++)
                listpr[i]="** / **";
              ...
        


        Donc voila, bon j'ai épargné les ".h" et les parties du prog inutiles ici.
        En espérant que cela donne plus de précision sur l'utilisation de mon bouton radio et permette de comprendre ce qui va pas.

        Merci.
        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2008 à 17:00:51

          L'erreur est là :
          bool oki = MaFenetre().getok();
          


          MaFenetre.getok(); va créer une fenetre temporaire que tu ne pourras pas utiliser par la suite. Cela va créer une instance de la classe MaFenetre qui ne sera pas celle que tu va afficher.
          • Partager sur Facebook
          • Partager sur Twitter
            16 avril 2008 à 17:08:16

            ok
            et du coup tu as une idée de comment je pourrais faire pour recupérer ma variable "ok1" ?

            Merci
            • Partager sur Facebook
            • Partager sur Twitter
              16 avril 2008 à 17:15:12

              Tu peux la déclarer en globale. :p
              Non sérieusement, je ne sais pas trop ce que tu peux faire, je suppose que tu créé ton répertoire dans ta fenêtre tu peux donc passer comme argument au constructeur du répertoire, ta fenêtre comme ceci :
              MaFenetre::MaFenetre() : QWidget()
              {
                 Repertoire monRep(this);
                 ...
              }
              

              Ainsi tu pourras récupérer la fenêtre parent et utiliser la méthode getok() dans la classe Répertoire, mais je ne sais pas si c'est correct et autorisé par la POO. :euh:

              • Partager sur Facebook
              • Partager sur Twitter
                16 avril 2008 à 17:19:25

                ok je vais me renseigner et voir si ca peut marcher.
                Merci bcp pour ton aide.
                • Partager sur Facebook
                • Partager sur Twitter

                [Qt] Radiobutton

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown