Bonsoir journal,
Je fais appel à toi pour un problème de programmation en Qt.
Je suis en train de me remettre un petit peu au développement de Konq Rellinks ( http://shift.freezope.org/konq_rellinks/(...) ) mais j'ai un problème pour associer un slot à un item d'un KToolBarPopupAction ( http://developer.kde.org/documentation/library/cvs-api/kdeui/html/c(...) )
J'ai en effet une fonction ayant la signature suivante :
/**
* Go to the link
* @param rel Relation name
* @param id Identifier of the menu item
*/
void goToLink(const QString & rel, int id=-1);
Et j'aimerais pouvoir utiliser comme slot cette fonction avec le paramètre "rel" déjà défini dans le genre :
connect( kactionmenu_map[lrel]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goToLink( "ma_relation", int ) ) );
Mais ce n'est pas possible à ma connaissance :(
Comment faire sachant que je ne peut pas crééer de fonction pour chaque relation à moins de perdre la souplesse de mon plugin ?
C'est à dire que faire ce qui suit pour chaque relation m'ait impossible.
void RelLinksPlugin::goSearch() {
goToLink("search");
}
Peut-on créer des slots "à chaud" ?
Merci cher journal pour ton aide,
Franck
PS : D'ailleurs si tu as envie de m'aider pour mon plugin cher journal, tu es le bienvenue :)
# Re: [Qt et Slots] Help !
Posté par Yann Hodique (site web personnel) . Évalué à 2.
auquel cas un
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 :
et
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
[^] # Re: [Qt et Slots] Help !
Posté par Infernal Quack (site web personnel) . Évalué à 1.
auquel cas un
Non.
En fait pour t'expliquer rapidos, kactionmenu_map[] représente tous les menus de la toolbar de Konq Rellinks. Il y a (ou y aura) un sous-menu par type de relation. Les relations étant celles définies dans les balises <link... > de la page-web.
Pourquoi des menus ? En fait parce que la norme n'interdit pas d'avoir 2 relations similaires ("up", "author", "section",...)
Quant au texte des items du menu il correspond au title de la balise link (et donc pas à rel). Il n'y a donc aucun lien entre rel et kactionmenu_map[lrel]->popupMenu()->text(id)
Ce qui explique pourquoi j'ai besoin de 2 paramètres à la méthode goToLink.
Sinon il me faut créer un slot par type de relation. Le problème est que la norme ne limite pas le nom des relations donc cette méthode ferait que je ne pourrais pas supporter les relations que je n'aurais pas mis en dur dans le code :(
Bref je suis coincé (pan !).
Cela dit je ne connaissais pas la possibilité d'accéder aux infos du sender(). En fait il faudrait que je puisse mettre le nom de la relation (rel) dans ce sender donc dans le QPopupMenu :(
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
# Re: [Qt et Slots] Help !
Posté par Epsos . Évalué à 1.
Bref, on pourrait appeller ca une closure ... :-)
[^] # Re: [Qt et Slots] Help !
Posté par Infernal Quack (site web personnel) . Évalué à 1.
J'avais pas pensé qu'on pouvait influencer sur l'instance sur lequel est lancé le slot.
Je vais tester ça ce soir \o/
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
[^] # Correction
Posté par Infernal Quack (site web personnel) . Évalué à 1.
....
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
# Re: [Qt et Slots] Help !
Posté par Gof (site web personnel) . Évalué à 1.
il y a moyen d'obtenir le nom de l'objet qui envoi le signal (avec sender()->name() )
ou alors tu fais une QMap<QObject*, QString> que tu remplis au moment de la confection, et un appel vers map[sender()] dans ta fonction.
[^] # Re: [Qt et Slots] Help !
Posté par Infernal Quack (site web personnel) . Évalué à 1.
L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.