Salut,
Si tu sais exactement quel QTabWidget transmettre lorsque le signal de ta QAction est lancé, tu peux -- éventuellement -- utiliser les expressions lambda pour la connexion entre le signal et le slot.
Cela prendra une forme proche de
connect(lAction, &QAction::triggered, this, [&](bool b){ nouvellePage(leTabWidget);});
Sinon, tu peux aussi suivre le conseil "de l'autre" (David Wheeler, en l'occurrence) qui nous dit que
Tout problème en informatique peut être résolu grâce à un niveau d'indirection supplémentaire.
Sauf, bien sur, un trop grand nombre d'indirections
Et, donc, tu peux très bien décider d'appliquer le SRP "au pied de la lettre" en te disant que ta fonction nouvellePage ne doit s'occuper que d'ajouter un élément au QTabWidget sélectionné et que ton slot devra se limiter à ... sélectionner le QTabWidget adéquat.
Ta fonction nouvellePage restera donc inchangée en prenant la forme de
1 2 3 4 5 6 7 8 9 10
| void fenetre_principale::nouvellePage(QTabWidget *onglet)
{
/* je suis pas sur du tout de ce code, mais bon */
QTextEdit *feuille=new QTextEdit;
onglet->addTab(feuille,"blank");
this->setCentralWidget(onglet);
} |
mais resteras véritablement une fonction (privée) et tu créera un slot spécifique proche de
1 2 3 4 5
| void fenetre_principale::onSomeActionTriggered(bool unused){
QTabWidget * found;
/* on recherche le QTabWidget qui doit être utilisé */
nouvellePage(found);
} |
pour lequel la connexion se fera de manière "plus classique", sous une forme proche de
connect(myAction, &QAction::triggered, this, &fenetre_principale::onSomeActionTriggered);
Enfin, une dernière possibilité est peut être de passer par un QSignalMapper, qui permet, justement, d'adapter les signaux émis aux slots utilisés
Comme tu peux le remarquer, tu disposes de plusieurs solutions... Je n'en sais pas assez sur ton projet pour me permettre de te conseiller une solutions plutôt qu'une autre... Ce sera à toi de voir celle qui s'adapte le mieux à ton problème de fond
Partager