Partage
  • Partager sur Facebook
  • Partager sur Twitter

ConboBox et Qlist

    3 mai 2022 à 15:04:55

    Bonjour,

    dans le constructeur,
    J'ai un premier "ComboBox"  :

    Combo1->addItem("Texte1")
    Combo1->addItem("Texte2")


    Je voudrais insérer des infos dans le 2° "ComboBox" à partir d'un "QList" mais en dehors du constructeur (dans une procédure "void" par exemple)
    Comment faire??
    Merci pour vos réponses.

    Bonne journée.

    • Partager sur Facebook
    • Partager sur Twitter
      3 mai 2022 à 15:26:13

      si tu regardes la liste des fonctions du combobox (https://doc.qt.io/qt-6.2/qcombobox.html) , tu vois 2 fonctions intéressantes addItems(QStringList) et insertItems(int,QStringList); il faut "transformer" ta QList en QStringList. 

      ou tu parcours ta Qlist dans une boucle et tu inséres les éléments  un à un avec addItem.

      Il ne faut pas oublier de faire clear() pour vider complètement le QComboBox avant (si besoin) pour éviter d'avoir des doublons

      • Partager sur Facebook
      • Partager sur Twitter
        3 mai 2022 à 15:38:14

        Bonjour umfred,

        Merci pour ton conseil de remplacer "QList" par "QStringList". Cela semble plus adéquat.

        Qu'en est il de 'remplir' le "QStringList" en dehors du constructeur, mais surtout comment s'y prendre??

        Merci pour ton aide.

        Bonne journée.

        • Partager sur Facebook
        • Partager sur Twitter
          3 mai 2022 à 15:51:05

          Que tu le remplisses dans le constructeur de la fenêtre ou ailleurs ça change peu de choses sur la façon de faire (il faut qu'il soit disponible et accessible). Que ce soit une QList<qString> ou une QStringList, elles se construisent de la même même façon.

          https://doc.qt.io/qt-6.2/qstringlist.html#initializing 

          • Partager sur Facebook
          • Partager sur Twitter
            3 mai 2022 à 16:57:13

             Re Bonjour,

            Voila ce que j'ai ajouté et je n'avance pas :

            Fichier Bourse.h

            #ifndef BOURSE_H
            #define BOURSE_H
                #include <QApplication>
                #include <QWidget>
                #include <QDialog>
                #include <QStringList>
                #include <QList>
            
                namespace Ui {
                class Bourse;
                }
            
                class Bourse : public QDialog
                {
                    Q_OBJECT
            
                public:
                    explicit Bourse(QWidget *parent = nullptr);
                    void CombSession(QStringList Session);// Ajout
            
                    ~Bourse();
            
                private:
                    Ui::Bourse *ui;
                    QStringList *Session;// Ajout
                };
            
            #endif // BOURSE_H

            Fichier Bourse.cpp

            #include "bourse.h"
            #include "ui_bourse.h"
            
            Bourse::Bourse(QWidget *parent) :
                QDialog(parent),
                ui(new Ui::Bourse)
            {
            
                Session = new QStringList; // Ajout
                ui->setupUi(this);
            
            
                ui->CboTravail->addItem("Session de travail");
                ui->CboTravail->addItem("Session de Restauration");
            
                ui->CboSession->addItems(Session); // Ajout
            
            }
            
            void CombSession(QStringList) // Ajout
            {
               QStringList Session = { "Session1", "Session2", "Session3" };
            }
            
            Bourse::~Bourse()
            {
                delete ui;
            }

            Ça bloque !!

            Bonne journée


            • Partager sur Facebook
            • Partager sur Twitter
              3 mai 2022 à 17:35:02

              ça veux dire quoi "ça bloque" ??

              Sinon Session ligne 9 est vide, donc ligne 16 rien n'est ajouter.

              Ta fonction CombSession redéfinit une variable Session (valide uniquement dans la fonction sauf erreur de ma part) et tu l'initialises avec des valeurs.

              Nulle part tu ajoutes ces valeurs dans le CboSession et nulle part tu appelles cette fonction.

              • Partager sur Facebook
              • Partager sur Twitter
                3 mai 2022 à 18:11:29

                Ce que je veux faire:

                1- Initialiser Session dans la fonction CombSession.

                2- Initialiser CboSession avec Session.

                • Partager sur Facebook
                • Partager sur Twitter
                  3 mai 2022 à 18:24:45

                  et bien il faut appeler CombSession là où il y a besoin (constructeur ou ailleurs)

                  et initialiser aussi CboSession  dans CombSession

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 mai 2022 à 18:46:39

                    Merci pour ton aide. La fonction CombSession devient :

                    void Bourse::CombSession(QStringList Session)
                    {
                    Session = { "Session1", "Session2", "Session3" }; ui->CboSession->insertItem(Session); }

                    J'ai l'erreur suivante : 

                          no matching function for call to 'QComboBox::insertItem(QStringList&)

                    Qu'est ce que j'ai raté??

                    -
                    Edité par allaham 3 mai 2022 à 18:52:39

                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 mai 2022 à 18:55:39

                      un s à insertItems mais ça serait plutôt addItems qu'il faut utiliser (insertItems a besoin d'un index d'insertion en 1er paramètre, cf la doc)

                      mais une remarque tu indiques passer une QStringList en paramètre de ta fonction, mais tu ne l'utilises pas dans la fonction (enfin, si tu lui affectes actuellement des valeurs en dur)

                      -
                      Edité par umfred 3 mai 2022 à 18:56:56

                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 mai 2022 à 19:33:41

                        J'avance à petit pas (??? peut être)

                        void Bourse::CombSession(QStringList Session)
                        {
                           Session = { "Session1", "Session2", "Session3" };
                           ui->CboSession->insertItems(0, Session);
                        }

                        Je n'ai plus le message d'erreur mais le "combobox" n'affiche rien.

                        Je n'ai pas saisi le sens de ta remarque. Le but est d’insérer dans le "ComboBox" des valeurs de type '2020/2021', '2021/2022', jusqu'à '2022/2023' par exemple. C'est des sessions de travail annuelles.

                        Le faire à partir d'une valeur première '2018' ou '2019' puis recomposer jusqu'à l'année en cours dans une boucle puis ajouter au fur et à mesure dans "Session".

                        -
                        Edité par allaham 3 mai 2022 à 19:59:59

                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 mai 2022 à 10:45:38

                          addItems ajoute la QStringList à la suite des éléments présent; insertItems ajoute la QStringList à partir d'un certain index.

                          Et encore une fois si tu n'appelles pas cette fonction, rien n'est fait.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 mai 2022 à 12:58:23

                             Bonjour et merci pour votre patience.

                            Voici mon fichier Bourse.h

                            #ifndef BOURSE_H
                            #define BOURSE_H
                                #include <QApplication>
                                #include <QWidget>
                                #include <QDialog>
                                #include <QStringList>
                                #include <QList>
                            
                                namespace Ui {
                                class Bourse;
                                }
                            
                                class Bourse : public QDialog
                                {
                                    Q_OBJECT
                            
                                public:
                                    explicit Bourse(QWidget *parent = nullptr);
                                    void CombSession(QStringList Session);
                            
                                    ~Bourse();
                            
                                private:
                                    Ui::Bourse *ui;
                                    QStringList *Session;
                                };
                            
                            #endif // BOURSE_H



                            Voici mon fichier Bource.cpp

                            #include "bourse.h"
                            #include "ui_bourse.h"
                             
                            Bourse::Bourse(QWidget *parent) :
                                QDialog(parent),
                                ui(new Ui::Bourse)
                            {
                                ui->setupUi(this);
                             
                                ui->CboTravail->addItem("Session de travail");
                                ui->CboTravail->addItem("Session de Restauration");
                                
                                // Je n'arrive pas à connecter le comboBox CboSession avec la fonction CombSession
                                //??QObject::connect(ui->CboSession->currentTextChanged(),this,CombSession(QStringList Session));
                             
                            }
                             
                            void CombSession(QStringList)
                            {
                               Session.clear();
                               Session = {"Session1", "Session2", "Session3"};
                               ui->CboSession->addItems(Session);
                            }
                             
                            Bourse::~Bourse()
                            {
                                delete ui;
                            }


                            Je ne sais pas comment relier la fonction CombSession() au ComboBox CboSession.

                            Bonne journée.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 mai 2022 à 13:53:18

                              Je ne connais pas QT, mais si la fonction CombSession est une fonction membre de ta classe Bourse, il faut peut-être le préciser lors de la définition ?

                              PS : Et le paramètre QStringList il sert à quoi?

                              -
                              Edité par Zero.c 4 mai 2022 à 13:55:15

                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 mai 2022 à 14:16:06

                                Bonjour à tous

                                Puis je avoir un exemple simple de comment faire

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 mai 2022 à 15:22:18

                                  En C++ pour définir une fonction membre hors de la déclaration de la classe on utilise l'opérateur de résolution de porté :: afin de préciser que c'est une fonction membre appartenant à la classe. Ex : NomDeLaClasse::NomDeLaFonctionMembre . Tu l'as bien fait pour le constructeur et le destructeur de ta classe alors pourquoi pas pour la fonction membre de ta classe CombSession ?

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    4 mai 2022 à 16:11:07

                                    Bonjour,

                                    Effectivement, voila ce que cela donne

                                    ........
                                    ligne 17   QObject::connect(ui->CboSession,SIGNAL(Accepted()),this,Bourse::CombSession(QStringList Session));

                                    1° question : Est ce que le SIGNAL "Accepted()" est le plus approprié pour pouvoir afficher le contenu du ComboBox?

                                    2° question : j'ai une erreur :

                                           Bourse.cpp:17: error: unexpected type name 'QStringList': expected expression

                                    Que dois je faire?

                                    -
                                    Edité par allaham 4 mai 2022 à 16:11:56

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 mai 2022 à 16:15:11

                                      relis ta ligne de code et réfléchis au message d'erreur "nom de type 'QStringList' non attendu: expression attendue" (il attend une expression et pas un nom de type la où se trouve QStringList)

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        4 mai 2022 à 16:26:39

                                        Voici la correction

                                        ligne 17   QObject::connect(ui->CboSession,SIGNAL(Accepted()),this,SLOT(CombSession(QStringList Session)));

                                        Le message d'erreur disparait, mais rien se s'affiche !!!!!!!!!!!

                                        Est ce que le SIGNAL(accepted) est judicieux dans ce cas là?

                                        -
                                        Edité par allaham 4 mai 2022 à 16:28:45

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          4 mai 2022 à 16:35:05

                                          Je parlais de cette ligne lors de mon précédent post :
                                          void CombSession(QStringList)

                                          De plus quand tu défini une fonction avec des paramètres, il faut mettre le type du paramètre, mais il faut aussi lui donner un nom. Et ensuite l'utiliser dans le corps de la fonction.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            4 mai 2022 à 16:41:33

                                            on ne sait toujours pas quand tu veux ajouter des choses donc on ne peut pas dire si c'est judicieux (quoique là tu connectes la fonction sur le signal Accepted de la combobox, or je ne crois pas que la combobox ai ce type de signal, et je ne suis pas convaincu que ce soit un événement sur cette combobox qui doivent servir à l'alimenter)

                                            https://doc.qt.io/qt-5/qobject.html#connect 

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              4 mai 2022 à 17:58:38

                                              Bonjour Zero.c,

                                              Pardon de ne pas l'avoir dit mais c'était corrigé :

                                              void Bourse::CombSession(QStringList Session)
                                              {
                                                 Session.clear();
                                                 Session = {"Session1", "Session2", "Session3"};
                                                 ui->CboSession->addItems(Session);
                                                 
                                              }

                                              Bonjour umfred,

                                              Ta remarque est judicieuse et après avoir consulté la doc et du peu que j'ai compris il en existe 7 en commençant par "activated(int index)" et le dernier "textHighlighted(const QString &text)".

                                              Je vais arrêter le fil de cette discussion et créer une nouvelle que j'espère plus compréhensible.

                                              Merci pour tous.

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                4 mai 2022 à 18:19:40

                                                allaham a écrit:

                                                Pardon de ne pas l'avoir dit mais c'était corrigé :

                                                void Bourse::CombSession(QStringList Session)
                                                {
                                                   Session.clear();
                                                   Session = {"Session1", "Session2", "Session3"};
                                                   ui->CboSession->addItems(Session);
                                                   
                                                }

                                                Bien, mais attention, tu as aussi un membre de ta classe qui s'appelle Session ?

                                                Est-ce bien utile d'avoir un paramètre si tu défini ses valeur dans ta fonction ?

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  4 mai 2022 à 18:36:14

                                                  Je m'embrouille. C'est pour cela que j'ai créer une nouvelle discussion car en principe il y a un seul membre "Session" dans ma classe.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  ConboBox et Qlist

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  • Editeur
                                                  • Markdown