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 :

QSignalMapper et QStringList

  1. #1
    Membre du Club
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Points : 44
    Points
    44
    Par défaut QSignalMapper et QStringList
    Bonjour ,

    j'ai une petit soucis , voila j'ai une QStringList (récupérée en parcourant un fichier en plaçant chaque élément dans une variable et en incrémentant celle-ci)
    j'aimerais que lorsqu'on clique sur un bouton s'affiche à l'écran un pop up avec la possibilité de choisir une des valeurs de la liste.

    J'ai pensé à créer une classe et un créer un design en mettant mes valeurs dedans mais une classe pour faire ça un peu bête non ?

    Du coup j'ai crée un bouton et voici mon code :
    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
    16
     
     QString ville = listeVille.join("\n");
      QSignalMapper *signalMapper2 = new QSignalMapper(this);
      QObject::connect(signalMapper2, SIGNAL(mapped(QString)), this, SLOT(afficher_ListeVilles(QString)));
                //Mappage, puis connexion du signal au mapper
                signalMapper2->setMapping(btn_Zone,listeVille);
                QObject::connect(btn_Zone, SIGNAL(clicked()), signalMapper2, SLOT(map()));
     
     
     
    void Main_Windows::afficher_Villes(QStringList liste_VillesZones){
     QStringList items = liste_VillesZones.toStdString();
    QInputDialog::getItem(this, "Votre pays", "De quel pays es-tu, cher Zéro ?"+items);
     
     
    }
    mais alors la grosse panique je suis bloquée !!
    Je ne sait même s'il est possible de cliquer sur les valeurs après ou non ..

    Merci pour votre éventuelle aide

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Hello ,

    Je pense que ce que tu veux faire est ceci:
    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
    16
    17
    18
    19
    20
    21
    22
     
     
    Main_Windows::Main_Windows(QWidget *parent) : QMainWindow(parent)
    {    
        QString ville = listeVille.join("\n");
        QSignalMapper *signalMapper2 = new QSignalMapper(this);
        QObject::connect(signalMapper2, SIGNAL(mapped(QString)), this, SLOT(afficher_villes(QString)));
        //Mappage, puis connexion du signal au mapper
        signalMapper2->setMapping(btn_Zone,listeVille);
        QObject::connect(btn_Zone, SIGNAL(clicked()), signalMapper2, SLOT(map()));
    }
     
     
    void Main_Windows::afficher_villes(const QString &liste_VillesZones)
    {
        QStringList items = liste_VillesZones.split("\n", QString::SkipEmptyParts);
        QString item = QInputDialog::getItem(this, "Votre pays", "De quel pays es-tu, cher Zéro ?", items);
        if (!item.isEmpty()){
             //Sélection OK, valeurs contenue dans la string "item"
             qDebug() << "item selected: " << item;
         }
    }
    Une autre solution, plus simple selon moi, mais qui nécessite que listVille soit une variable membre de la classe Main_Windows :

    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
     
    //Constructeur Main_Windows: 
    connect(btn_Zone, SIGNAL(clicked()), this, SLOT(selectionVille()));
     
    void Main_Windows::selectionVille()
    {
         bool ok;
         //Pour que cela fonctionne, il faut que listVille soit une variable membre de la classe Main_Windows
         QString item = QInputDialog::getItem(this, tr("Sélection ville"),
                                              tr("Veuillez svp sélectionner une ville: "), listVille, 0, false, &ok);
         if (ok && !item.isEmpty()){
             //Sélection OK, valeurs contenue dans la string "item"
             qDebug() << "item selected: " << item;
         }
    }
    Quelques remarques concernant ton code :


    Il n'est pas possible de passer un QStringList en paramètre de la fonction QSignalMapper::setMapping().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    QSignalMapper *signalMapper2 = new QSignalMapper(this);
    QObject::connect(signalMapper2, SIGNAL(mapped(QString)), this, SLOT(afficher_ListeVilles(QString)));
     
    //Je pense ici que tu as mélanger 2 façon de faire différentes. 
    //Mappage, puis connexion du signal au mapper
    signalMapper2->setMapping(btn_Zone,listeVille);
    QObject::connect(btn_Zone, SIGNAL(clicked()), signalMapper2, SLOT(map()));
    Une possibilité serait la suivante, en créant un bouton par ville:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      QSignalMapper *signalMapper2 = new QSignalMapper(this);
      QObject::connect(signalMapper2, SIGNAL(mapped(QString)), this, SLOT(afficher_ListeVilles(QString)));
    foreach(QString ville, listVille){
        QPushButton *btVille = new QPushButton(ville);
        signalMapper2->setMapping(btVille, ville);
        //Placement du bouton dans un layout, etc.... 
    }
    En espérant t'avoir aider.

  3. #3
    Membre du Club
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Points : 44
    Points
    44
    Par défaut
    Merci beaucoup !

    j'ai trouvé la solution hier soir en plus

    par contre j'ai un deuxième soucis en gros j'ai un fichier xml et en fonction de la ville cliquée ça lance un exécutable !
    or je récupère ma ville sélectionnée mais je ne sais pas rechercher dans un fichier XML j'ai regarder du côté de attributeNode mais je ne voit pas trop comment faire

Discussions similaires

  1. Initialiser une QStringList avec les valeurs d'un fichier
    Par marie mouse dans le forum Débuter
    Réponses: 4
    Dernier message: 19/08/2009, 12h00
  2. Probleme de compteur QStringList count()
    Par jerominovich dans le forum Débuter
    Réponses: 1
    Dernier message: 21/03/2009, 18h21
  3. Réponses: 5
    Dernier message: 10/03/2009, 21h28
  4. Réponses: 1
    Dernier message: 03/06/2008, 10h21

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