Bonjour,
je réalise une application avec la SDL, et j'ai crée des boutons. Je voudrais que lorsqu'un bouton est pressé cela appelle la bonne fonction.
La solution : Signals and Slots de Qt me parait intéressante et j'aimerais pouvoir l'implémenter.
Pour cela, je pensais faire une classe Connecteur et une fonction connect qui prend l'objet emetteur, la méthode qui envoie le signal, l'objet recepteur, et la méthode qui doit recevoir le signal.
Idée pour la classe Connecteur :
De plus admettons que je puisse faire la déclaration de mes méthodes (c'est peux etre possible en s'inspirant de mem_fun), je voudrais un conteneur de pointeurs sur mes objets, et de pointeurs sur mes méthodes pour pouvoir y accéder de cette maniere :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template <class Emetteur, class Recepteur> class Connecteur { Emetteur & emetteur; Connecteur & connecteur; // Et la problème je ne peux pas déclarer mes pointeurs sur des méthodes // car je peux avoir void, int, ... };
onClic a le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // admettons que ce code marche Bouton bouton; Receveur receveur; connect(&bouton, &bouton::onCLic, &receveur, &Receveur::methode);
et send :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void Bouton::onClic() { Connecteur::send(this, &Bouton::onClic); }
Avec ce code je dois forcement avoir une methode qui n'a pas de parametres donc c'est très limité, mais bon le problème est que cette idée d'implémentation ne me parait pas réalisable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void Connecteur::send(Emetteur & emetteur, PtrEMethode methode) // PtrEMethode est un typedef pour un pointeur de methode de emetteur { Recepteur * objet = connecteurs[emetteur][methode].first; PtrRMethode * methodeR = connecteurs[emetteur][methode].second; objet->(*methodeR)(); }
J'aimerais avoir votre avis, et savoir comment vous feriez pour implémenter ceci, ou s'il y a une meilleur méthode que celle utilisée par Qt faite le moi savoir.
D'avance merci.
Partager