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 :

Menu QAction vers fonction(QString)

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 18
    Par défaut Menu QAction vers fonction(QString)
    Bonjour,
    Je cherche à créer un menu dans lequel je met une liste dont chaque clic sur un élément appellera une fonction qui a un QString en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach( QextPortInfo item, liste_ports )
         {
            QAction *action = new QAction(item.physName, this);
            action->setVisible(false);
            ui->menuPort->addAction(item.physName);
         }
         connect(ui->menuPort, SIGNAL(triggered(QAction *)),
                 this, SLOT(init_port(QAction.text() *)), Qt::UniqueConnection);
    Ce qui est inscrit ci-dessus ne marche pas. Et je pense que le problème vient d'ici : SLOT(init_port(QAction.text() *))
    Seulement je ne trouve pas comment écrire le fait que init_port() soit appelé en lui donnant le bon paramètre.

    Sauriez vous ce que je devrais mettre ?
    Merci d'avance de votre aide.

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

    C'est faisable avec la classe QSignalMapper :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    QSignalMapper *signalMapper = new QSignalMapper(this);
    foreach( QextPortInfo item, liste_ports )
    {
        QAction *action = new QAction(item.physName, this);
        action->setVisible(false);
        ui->menuPort->addAction(item.physNameaction);
        connect(action, SIGNAL(triggered()), signalMapper, SLOT(map()));
        signalMapper->setMapping(action, item.physName);
    }
    connect(signalMapper, SIGNAL(mapped(const QString &)),
            this,         SLOT(init_port(const QString &)) );
    [EDIT] Correction item.physName => action
    Dernière modification par Invité ; 11/05/2014 à 21h42.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 18
    Par défaut
    Merci pour l'aide.
    En revanche, j'ai toujours une erreur à l'execution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object::connect: No such slot MainWindow::init_port(const QString &) in ../test_led_arduino/mainwindow.cpp:51
    Je l'ai pourtant déclarée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void MainWindow::init_port(const QString &dev_port)

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    Je pense qu'il ne faut pas indiquer le const et le & lors de la connexion signal/slot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connect(signalMapper, SIGNAL(mapped(QString)),
    this, SLOT(init_port(QString)) );

  5. #5
    Invité
    Invité(e)
    Par défaut
    C'est je pense surtout dû au fait que dans le premier code présenté, le slot init_port prend quelque chose de bizarre SLOT(init_port(QAction.text() *)) qui n'est sûrement pas un QString.

    @tymop : As-tu pensé à créer un tel slot dans ta classe MainWindow avec la signature suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void init_port(QString const & physName);
    ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 18
    Par défaut
    Bonsoir,

    As-tu pensé à créer un tel slot dans ta classe MainWindow avec la signature suivante
    Non, je l'ai déclaré comme marqué plus haut void MainWindow::init_port(const QString &dev_port)

    J'ai aussi essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(signalMapper, SIGNAL(mapped(QString)),this, SLOT(init_port(QString)) );
    mais ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object::connect: No such slot MainWindow::init_port(QString) in ../test_led_arduino/mainwindow.cpp:51
    Note : j'ai essayé la déclaration "init_port(QString const & dev_port)" mais c'est pareil

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

Discussions similaires

  1. Passage de graphique vers fonction
    Par thechakib dans le forum MATLAB
    Réponses: 1
    Dernier message: 09/05/2007, 16h05
  2. menu personalisé en fonction des utilisateurs
    Par valer dans le forum Delphi
    Réponses: 2
    Dernier message: 27/10/2006, 09h02
  3. [PHP-JS] Passage de paramètre de Javascript vers fonction Php
    Par winnie82 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/07/2006, 10h06
  4. [JSP] Mise à jour d'un menu déroulant en fonction d'un autre
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 12/12/2005, 13h32
  5. Pointeur vers fonction
    Par flopaname dans le forum Langage
    Réponses: 3
    Dernier message: 23/06/2005, 15h46

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