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 :

Connecter un signal à un slot avec une signature différente


Sujet :

Qt

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Connecter un signal à un slot avec une signature différente
    Bonjour à tous , j'suis debutant en programmation c++ et en ce moment je me heurte une difficulté, celle de connecter le signal d'un objet Qt à un slot personnel ayant une signature différente de ce signal
    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
     
     //SIGNAL
    QAction::triggered(bool checked==false)
     
    //SLOT
     
    void fenetre_principale::nouvellePage(QTabWidget *onglet)
    {
        QTextEdit *feuille=new QTextEdit;
     
        onglet->addTab(feuille,"blank");
     
     
        this->setCentralWidget(onglet);
    }
    Comme vous le savez il faut que la signal et le slot soient compatibles pour que la methode "connect" de QOBJET puisse les connecter.
    Si quelqu'un a une astuce merci,
    humblement Arima lou

  2. #2
    Membre habitué

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Points : 193
    Points
    193
    Billets dans le blog
    3
    Par défaut
    Bonjour, il me semble que c'est impossible à effectuer pour ne pas avoir une erreur (dans Qt Creator pour ma part) de slot introuvable/indéfini.
    Je ne suis pas sûr mais je crois qu'il y a une errer au niveau du pointeur.
    Ce que tu veux faire est de créer un nouveau QTabWidget ou d'ajouter une tab à un existant ?

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

    Informations professionnelles :
    Activité : aucun

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

    Si tu sais exactement quel QTabWidget transmettre lorsque le signal de ta QAction est lancé, tu peux -- éventuellement -- utiliser les expressions lambda pour la connexion entre le signal et le slot.

    Cela prendra une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(lAction, &QAction::triggered, this, [&](bool b){ nouvellePage(leTabWidget);});
    Sinon, tu peux aussi suivre le conseil "de l'autre" (David Wheeler, en l'occurrence) qui nous dit que
    Tout problème en informatique peut être résolu grâce à un niveau d'indirection supplémentaire.

    Sauf, bien sur, un trop grand nombre d'indirections
    Et, donc, tu peux très bien décider d'appliquer le SRP "au pied de la lettre" en te disant que ta fonction nouvellePage ne doit s'occuper que d'ajouter un élément au QTabWidget sélectionné et que ton slot devra se limiter à ... sélectionner le QTabWidget adéquat.

    Ta fonction nouvellePage restera donc inchangée en prenant la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void fenetre_principale::nouvellePage(QTabWidget *onglet)
    {
        /* je suis pas sur du tout de ce code, mais bon */
        QTextEdit *feuille=new QTextEdit;
     
        onglet->addTab(feuille,"blank");
     
     
        this->setCentralWidget(onglet);
    }
    mais resteras véritablement une fonction (privée) et tu créera un slot spécifique proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void fenetre_principale::onSomeActionTriggered(bool unused){
        QTabWidget * found;
        /* on recherche le QTabWidget qui doit être utilisé */
        nouvellePage(found);
    }
    pour lequel la connexion se fera de manière "plus classique", sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(myAction, &QAction::triggered, this, &fenetre_principale::onSomeActionTriggered);
    Enfin, une dernière possibilité est peut être de passer par un QSignalMapper, qui permet, justement, d'adapter les signaux émis aux slots utilisés

    Comme tu peux le remarquer, tu disposes de plusieurs solutions... Je n'en sais pas assez sur ton projet pour me permettre de te conseiller une solutions plutôt qu'une autre... Ce sera à toi de voir celle qui s'adapte le mieux à ton problème de fond

Discussions similaires

  1. [QtCore] Petit souci avec un slot d'une classe différente
    Par Jiyuu dans le forum PyQt
    Réponses: 1
    Dernier message: 18/01/2011, 21h21
  2. Réponses: 0
    Dernier message: 16/12/2010, 12h28
  3. [WD14] Envoi de mail avec une signature
    Par azer2003fr dans le forum WinDev
    Réponses: 4
    Dernier message: 23/03/2010, 15h27
  4. Signals et Slots avec QextSerialPort
    Par sardik dans le forum Qt
    Réponses: 1
    Dernier message: 05/05/2009, 17h30
  5. Réponses: 5
    Dernier message: 10/10/2006, 09h39

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