• # Re: [Qt et Slots] Help !

    Posté par (site web personnel) . En réponse au journal [Qt et Slots] Help !. Évalué à 2.

    d'après ce que je crois comprendre, le nom de la relation et l'id de menu sont liées (je vois bien un item "search" par exemple), donc pourquoi mettre les 2 en paramètre? (j'imagine que rel == kactionmenu_map[lrel]->popupMenu()->text(id) ou approchant, quitte à passer par une map ou autre)
    auquel cas un

    slot void goToLink(int id=-1);
    connect( kactionmenu_map[lrel]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goToLink( int ) ) );

    serait suffisant.
    Le seul cas (que je vois) pour lequel les 2 seraient effectivement indépendants, c'est un appel d'une meme relation qui peut "bouger" dans le menu sans modifier le nom des items eux-mêmes (ce qui est sacrément vicieux, et à mon avis pas très user-friendly :))


    ou alors pourquoi pas quelque chose du genre :

    public slots:
    void slotGoToLinkById(int id) {
    QPopupMenu * menu = dynamic_cast<QPopupMenu *>(sender());
    if(menu) {
    gotoLink(menu->text(id),id);
    }
    }

    et

    connect( kactionmenu_map[lrel]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( slotGoToLinkById( int ) ) );

    de toute manière, faire un slot avec un argument statique serait contre-performant (puisque ça rend ton code... statique) et le créer dynamiquement est peut-être possible (sans doute, puisque rien n'est vérifié avant exécution) en bricolant le code des meta-objets à la main, mais de base je ne crois pas: en tout état de cause, ça serait un massacre au niveau du nombre de connexions et slots, et donc des performances de l'application