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 :

Modifier les propriétés d'une checkbox "à la volée"


Sujet :

Qt

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Modifier les propriétés d'une checkbox "à la volée"
    Bonjour, je vous mets un bout de code avant de dire ce que je souhaite :

    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
    //======================================
    QWidget *window = new QWidget;
         QCheckBox *button1 = new QCheckBox ("One");
         QCheckBox *button2 = new QCheckBox ("Two");
         QCheckBox *button3 = new QCheckBox ("Three");
         QCheckBox *button4 = new QCheckBox ("Four");
         QCheckBox *button5 = new QCheckBox ("Five");
     
         QVBoxLayout *layout = new QVBoxLayout;
         layout->addWidget(button1);
         layout->addWidget(button2);
         layout->addWidget(button3);
         layout->addWidget(button4);
         layout->addWidget(button5);
     
         window->setLayout(layout);
         window->show();
     
         int nombreItem = layout->count();
         int i;
         for (i=0; i < nombreItem ; i++)
         {
            layout->layout()->itemAt(i)->widget()->setHidden(1);
          }
            button3->setHidden(0);
            button3->setChecked(1);
    //======================================

    Voilà, donc en gros, ca affiche des QCheckBox, puis la fonction for les cache de manière itérative, et enfin le bouton3 est affiché, puis coché.

    Ce code fonctionne parfaitement, mais voici mon but :
    Je souhaiterai faire que dans la boucle for, les checkbox se cochent cette fois-ci et que seule la checkbox button3 ne sois pas cochée, par exemple et donc que toutes les checkbox soient affichées par contre (dans le code je les cachais pour tester).
    En gros passer d'une boucle qui cache les checkbox à une boucle qui coche les checkbox ^^

    Si vous avez une idée de morceau de code, je suis prenneur ^^.

  2. #2
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Il suffit de faire la même chose en appelant la fonction qui coche ta checkbox (un slot en l'occurrence) au lieu de la fonction qui la rend invisible. La seule difficulté en plus est que tu récupères un QWidget et pas un QCheckBox, il faut donc faire un cast dynamique

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Hmm
    En réalité j'ai fait ceci pour m'aider dans mon problème :

    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
     
    ;================================
    QWidget *window = new QWidget;
         QCheckBox *button1 = new QCheckBox ("One");
         QCheckBox *button2 = new QCheckBox ("Two");
         QCheckBox *button3 = new QCheckBox ("Three");
         QCheckBox *button4 = new QCheckBox ("Four");
         QCheckBox *button5 = new QCheckBox ("Five");
     
         QVBoxLayout *layout = new QVBoxLayout;
         layout->addWidget(button1);
         layout->addWidget(button2);
         layout->addWidget(button3);
         layout->addWidget(button4);
         layout->addWidget(button5);
     
         window->setLayout(layout);
         window->show();
     
     
        QList<QCheckBox *> allCBox;
        allCBox.append(button1);
        allCBox.append(button2);
        allCBox.append(button3);
        allCBox.append(button4);
        allCBox.append(button5);
     
         int i;
     
        for (i=0; i < allCBox.count(); i++)
        {
            allCBox[i]->setChecked(1);
        }
    ;================================
    J'ai donc créé une liste des mes checkbox, ce qui est un peu... rébarbatif à mon gout.
    Y a t-il une méthode pour la création automatique de cette création de liste ?
    Genre un code dans le genre de ce que j'ai tenté de faire là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        QList<QCheckBox *> allCBox;
        allCBox.append(m_menu2->findChildren<QCheckBox *>());
        for (i=0; i < allCBox.count(); i++)
        {
            allCBox[i]->setChecked(1);
        }
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        QList<QCheckBox *> allCBox = layout->findChildren<QCheckBox *>();
        for (i=0; i < allCBox.count(); i++)
        {
            allCBox[i]->setChecked(1);
        }
    Par contre, j'aurai vraiment voulu me passer de slot hehe.
    Qu'est-ce qu'un cast dynamique ?

    Edit : J'ai eu le temps de chercher sur le site ce qu'est le cast dynamique, vive la FAQ ^^... Je regarde un peu.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 111
    Points : 195
    Points
    195
    Par défaut
    Bonjour,
    essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        QObject *obj = new QCheckBox;
        for (i = 0; i < lay->count(); i++)
        {
            if (lay->itemAt(i)->controlTypes() == QSizePolicy::CheckBox)
            {
                if (QCheckBox *cb = qobject_cast<QCheckBox *>(lay->itemAt(i)->widget()))
                    cb->setChecked(i!=2);//2 pour tester le 3ème bouton
            }
        }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut woop woop
    Huhu, ton code est impeccable, je l'ai adapté au mien et ca marche parfaitement... Et ca a répondu à d'autres questions que je me posais, par rapport aux controls possibles sur des items.

    Je vais potasser le qobject_cast que je trouve fort intéressant !
    Merci pour cette réponse aux p'tits oignons !






    Pour cloturer le poste, je remets donc ma demande de départ, ainsi que la résolution:

    Je souhaitais faire en sorte de appliquer un setchecked(1) sur toutes les checkbox contenues dans un Qlayout.
    Le code suivant permet donc de savoir comment déterminer le type d'objet contenu dans un emplacement de layout, et donc de modifier les propriétés de l'objet.


    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
    ;=========================
    QWidget *window = new QWidget;
         QCheckBox *button1 = new QCheckBox ("One");
         QCheckBox *button2 = new QCheckBox ("Two");
         QCheckBox *button3 = new QCheckBox ("Three");
         QCheckBox *button4 = new QCheckBox ("Four");
         QCheckBox *button5 = new QCheckBox ("Five");
     
         QVBoxLayout *layout = new QVBoxLayout;
         layout->addWidget(button1);
         layout->addWidget(button2);
         layout->addWidget(button3);
         layout->addWidget(button4);
         layout->addWidget(button5);
     
         window->setLayout(layout);
         window->show();
     
         int nombreItem = layout->count();
         int i;
         for (i=0; i < nombreItem ; i++)
         {
                if (layout->itemAt(i)->controlTypes() == QSizePolicy::CheckBox)
                    if (QCheckBox *cb = qobject_cast<QCheckBox *>(layout->itemAt(i)->widget()))
                        cb->setChecked(1);
         }
    ;=========================

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

Discussions similaires

  1. Modifier les propriétés d'une div au survol d'une autre
    Par umeboshi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/09/2008, 18h02
  2. Réponses: 2
    Dernier message: 17/02/2008, 20h33
  3. Réponses: 2
    Dernier message: 13/12/2006, 17h09
  4. Réponses: 3
    Dernier message: 11/01/2006, 12h01

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