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

Discussion :

Connecter un slot à un signal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Connecter un slot à un signal
    Bonjour,

    Je débute sous Qt et je rencontre un problème pour connecter un signal à un slot.
    Mon application contient 2 listes (QComboBox) et les choix de la 2ième sont fonctions de la sélection de la 1ière.
    La compilation se passe correctement mais le slot n'est jamais appelé à l'exécution du programme.

    header :
    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
    class List : public QComboBox
    {
        Q_OBJECT
     
        public:
            List();
     
        private slots:
            void UpdateList2(QString family);
     
        private:
            QComboBox *list1;
            QComboBox *list2;
     
    };
    source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    List::List()
    {
        list1 = new QComboBox;
        list2 = new QComboBox;
     
        list1->addItem("Item1");
        list1->addItem("Item2");
        list1->addItem("Item3");
     
        connect(this->list1, &QComboBox::currentTextChanged, this, &List::UpdateList2);
     
    }

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Salut,

    C'est peut être, tout simplement, parce que le signal currentTextChanged n'est jamais appelé

    A priori, ce signal est appelé lorsque tu écrit du texte dans la zone d'édition du combobox; à chaque fois que tu tapes une lettre au clavier (ou est-ce lorsque tu enfonces la touche <Enter> je ne suis plus sur ), ce qui n'est peut-être pas la situation dans laquelle tu te trouves

    J'aurais tendance à croire que, ce que tu veux, c'est faire appel à ton slot lorsque modifie la sélection dans ton combobox, et que le signal auquel tu dois connecter ton slot devrait plutôt etre currentIndexChanged.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Effectivement, je me suis rendu compte que c'est peut-être pas le bon signal. Mais même avec le signal currentIndexChanged, cela ne marche pas.
    Je mets un lien avec un code minimaliste pour ceux qui veulent.
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par Redbull68 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class List : public QComboBox
    {
        ... 
        private:
            QComboBox *list1;
            QComboBox *list2; 
    };
    Deux QComboBox dans une QComboBox, cela n'augure rien de bon. D'autant plus quand je vois ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        List list;
        layout->addWidget(list.GetList1(), 0, 0);
        layout->addWidget(list.GetList2(), 1, 0);
    dans ton constructeur de AppWindow

    Ce ne sont pas les deux QComboBox membres list1 et list2 que tu devrais ajouter à ce niveau, mais ta list. Et c'est son constructeur qui devrait se charger de les ajouter dans son propre layout. Mais pas une List list; locale qui va être détruite à la fin du scope (et sa connexion avec*), une allouée avec new.

    Et une List qui hérite de QWidget, et plus important encore utilise le système de parent-enfant de Qt. Car ici tes deux membres list1 et list2 ne sont pas ses enfants et sont complètement indépendants, ce qui fait qu'ils ne sont même pas détruits en même temps que list.

    * Lorsque le sender ou le receiver d'une connexion est détruit, alors la connexion l'est aussi.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    merci du retour. Comme je l'ai dit, je débute sous Qt et en C++ et vue ton retour, ça se voit .

    Pour les 2 QComboxBox dans 1 QComboBox je suppose que c'est dû à l'héritage de la classe, ou du moins c'est la première idée qui m'est venue en te lisant.
    Pour la list, je me suis aperçue qu'elle était locale et détruite à la fin du scope.

    J'ai vue que sous Qt il existe QGroupBox et vue que j'ai besoin de 2 QComboBox liées, cette class est peut être plus adaptée.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Redbull68 Voir le message
    merci du retour. Comme je l'ai dit, je débute sous Qt et en C++ et vue ton retour, ça se voit .
    On est tous passés par là

    Citation Envoyé par Redbull68 Voir le message
    Pour les 2 QComboxBox dans 1 QComboBox je suppose que c'est dû à l'héritage de la classe, ou du moins c'est la première idée qui m'est venue en te lisant.
    Oui. Il ne s'agit pas de personnaliser un QComboxBox, mais d'en réunir deux au sein d'un même QWidget.

    Citation Envoyé par Redbull68 Voir le message
    J'ai vue que sous Qt il existe QGroupBox et vue que j'ai besoin de 2 QComboBox liées, cette class est peut être plus adaptée.
    La classe QGroupBox n'offre qu'un aspect esthétique sous forme de cadre avec titre comme tu peux l'observer dans sa documentation, donc pourquoi pas, mais comme QWidget il ne fera pas le lien que tu souhaites entre tes deux QComboBox à ta place. Dans les deux cas, il faudra le coder toi-même, comme tu étais parti avec le slot List::UpdateList2.
    Dernière modification par Invité ; 19/07/2018 à 19h59.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Finalement j'ai décidé de changer de widget.

    Plutôt que d'utiliser 2 QComboBox pour faire un menu et sous menu, je vais utiliser QPushButton qui permet de le faire. Cela sera plus pratique dans l'utilisation de mon programme et qui, graphiquement, ressemble plus à se que je veux.



    Même si je n'utilise plus les signal/slot (du moins dans l'immédiat, je remercie ceux qui m'ont aidé et qui m'ont permis d'apprendre.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/08/2014, 10h03
  2. Connecter les slots ?
    Par bioinfornatics dans le forum PyQt
    Réponses: 2
    Dernier message: 28/07/2009, 16h42
  3. Réponses: 4
    Dernier message: 28/12/2008, 22h46
  4. Réponses: 3
    Dernier message: 21/03/2006, 11h37
  5. Problèmes de slots et signals
    Par femtosa dans le forum Qt
    Réponses: 4
    Dernier message: 13/12/2005, 10h39

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