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 :

Slots et arguments

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut Slots et arguments
    Bonjour,

    Soient un tabwidget et plusieurs boutons qui renvoient à différentes pages du tab.
    Je cherche à créer une fonction de réponse à un clic sur un bouton pour renvoyer sur un tab spécifique.

    Dans le fichier MaFenetre.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public slots:
        void SetCurrentTab(int);
    Dans le fichier MaFenetre.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    connect(widget.action1, SIGNAL(triggered()), this, SLOT(SetCurrentTab(1))); 
    connect(widget.action2, SIGNAL(triggered()), this, SLOT(SetCurrentTab(2)));
    puisque je veux associer action1 au tab nº1, le 2 au tab 2, etc.
    Puis, plus loin dans ce fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void MainWin::SetCurrentTab(int TN){
    widget.tabWidgetMain->setCurrentIndex(TN);    
    }
    Et là, j'ai une erreur de type "No such slot MainWin::SetCurrentTab(1)".

    Ma question : est-il possible de créer une fonction comme ça avec un argument ?
    Je me pose la question car je n'ai trouvé aucun exemple comparable sur le net...

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 72
    Par défaut
    Salut devroot,
    ça marche pas avec "SLOT(SetCurrentTab(1)" ou "SLOT(SetCurrentTab(2)", vous devez mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connect(widget.action1, SIGNAL(triggered()), this, SLOT(SetCurrentTab(int))); 
    connect(widget.action2, SIGNAL(triggered()), this, SLOT(SetCurrentTab(int)));
    car on doit pas spécifie une valeur dans un slot.
    Il reste de trouver un moyen pour distinguer l'action qui corresponde

  3. #3
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Oui, d'accord sur le int au lieu d'une valeur donnée puisqu'il s'agit d'une définition de fonction.

    MAIS ALORS, comment je fais pour spécificier que le widget action1 doit appeler la fonction SetCurrentTab avec un argument 1 plutôt que 2 ou 3... ?

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Tu peux utiliser QSignalMapper

  5. #5
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Je viens de lire quelques pages sur QSignalMapper. Je vois comment ça marche
    mais je ne sais pas où ajouter ce code...

    Effectivement, je travaille dans Netbeans associé à QT Designer.
    Dans Netbeans je ne trouve pas le constructeur de mes boutons et dans Designer je
    ne peux leur associer que des signal / slot simples....??

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Désolé, j'avais mal compris ton problème. Je pensais que tes boutons étaient créés par du code et non par Designer.
    Dans ton cas, si le nombre de boutons et de tab est fixé, le plus simple (et le plus classique) est de créer un slot par bouton.

    Si tu veux utiliser quand même QSignalMapper, il faut mettre le code au même endroit que tes connect

Discussions similaires

  1. Passer un argument à un slot
    Par yoshi84300 dans le forum Débuter
    Réponses: 1
    Dernier message: 21/04/2013, 15h07
  2. Slots QML : typage des arguments
    Par white_tentacle dans le forum Qt Quick
    Réponses: 4
    Dernier message: 20/08/2012, 09h15
  3. [QtCore] Passage d'argument signal / slot
    Par Neitsa dans le forum PyQt
    Réponses: 2
    Dernier message: 22/09/2011, 15h20
  4. Probléme argument pour une fonction d'un SLOT
    Par guillaume40 dans le forum Qt
    Réponses: 3
    Dernier message: 03/03/2008, 13h55
  5. Réponses: 3
    Dernier message: 21/03/2006, 10h37

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