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 :

Liste d'objets à connecter à une fonction avec argument


Sujet :

Qt

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut Liste d'objets à connecter à une fonction avec argument
    Salut,

    je travail avec une liste de 10 QAction, utilisé en tant qu'item d'un menu du systeme tray.
    j'ai créé une liste de 10 QString, chacun va etre modifié pendant l'utilisation de l'application

    et tout ca x9, ca fait 9 listes de 10 actions, et 9 listes de 10 string.

    en fait les strings sont des url lu dans un fichier xml, durant l'utilisation de l'application, le xml va changer et les listes de string vont se réactualisé.

    mon but est que lorsque je clic sur un item, j'ouvre une page web du lien contenu dans l'xml.

    je bloque sur le connect :

    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
     
    for(int i =0; i<10; i++){
            connect(articlesALaUne[i], SIGNAL(triggered()), this, SLOT(openUrl(i,AppEnums::ArticleTypeALaUne)));
        }
     
     
     
    void Window::openUrl(int i, AppEnums e){
        QString urlTarget;
        if(e==AppEnums::ArticleTypeALaUne) urlTarget=AppVars::alauneShortcuts[i];
        else if(e==AppEnums::ArticleTypeMonde) urlTarget=AppVars::mondeShortcuts[i];
        else if(e==AppEnums::ArticleTypePolitique) urlTarget=AppVars::politiqueShortcuts[i];
        else if(e==AppEnums::ArticleTypeSocSant) urlTarget=AppVars::socsantShortcuts[i];
        else if(e==AppEnums::ArticleTypeEco) urlTarget=AppVars::ecoShortcuts[i];
        else if(e==AppEnums::ArticleTypeScience) urlTarget=AppVars::scienceShortcuts[i];
        else if(e==AppEnums::ArticleTypeArt) urlTarget=AppVars::artShortcuts[i];
        else if(e==AppEnums::ArticleTypeSport) urlTarget=AppVars::sportShortcuts[i];
        else if(e==AppEnums::ArticleTypePeople) urlTarget=AppVars::peopleShortcuts[i];
     
        QDesktopServices::openUrl(QUrl(urlTarget));
    }
    articlesALaUne est la première des 9 liste de QAction
    AppVars::alauneShortcuts est la première des listes des QString

    j'ai seulement écrit la boucle for de la première liste

    AppEnums est une enum class

    void openUrl(int i, AppEnums e); a été écrit en tant que public slot dans le .hpp

    si vous avez besoin d'autre détail, je suis assez réactif

    l'erreur : pas de problème à la compilation, à l'execution j'ai 10 fois le message :QObject::connect: No such slot Window::openUrl(i,AppEnums::ArticleTypeALaUne)
    et bien sur l'ouverture de page web ne fonctionne pas.

    quelqu'un aurait une solution?

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut
    pour l'instant je me suis contanté de faire cela 9 fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    QSignalMapper* signalMapperALaUne = new QSignalMapper (this) ;
        for(int i =0; i<10; i++){
            connect(articlesALaUne[i], SIGNAL(triggered()), signalMapperALaUne, SLOT(map()));
            signalMapperALaUne -> setMapping (articlesALaUne[i], i);
        }
        connect (signalMapperALaUne, SIGNAL(mapped(int)), this, SLOT(openUrlALaUne(int))) ;
     
    void Window::openUrlALaUne(int i){
        QDesktopServices::openUrl(QUrl(AppVars::alauneShortcuts[i]));
    }
    si quelqu'un à une autre solution pour réduire les 7*9 = 63 lignes de code, je vous écoute

  3. #3
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Est-ce que tu ne peux pas hériter de QAction pour créer une classe à toi qui contient l'url et simplement connecter toutes les actions à un seul slot qui se contente d'ouvrir l'url peu importe qui le demande ?
    En amont tu aurais juste à maintenir à jour ta liste de QActions, et éventuellement faire de nouveaux connect si tu en crées de nouvelles pendant l'exécution.

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut
    j'avoue c'est une solution. Bien joué.

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

Discussions similaires

  1. recuperer une fonction avec arguments dans une dll
    Par freuh94 dans le forum Windows
    Réponses: 3
    Dernier message: 03/10/2009, 11h45
  2. creer une fonction avec arguments
    Par bigmousse69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/04/2009, 10h10
  3. [A03] docmd.openmodule pour une fonction avec argument
    Par cbleas dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/03/2009, 13h50
  4. [DOM] Onmouseover pour lancer une fonction avec arguments
    Par Trock dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/06/2007, 13h31
  5. creer une fonction avec arguments
    Par niglo dans le forum ASP
    Réponses: 3
    Dernier message: 03/06/2005, 08h04

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