Bonjour à tous,
Cette fois, je me pose la question sur la gestion d'une boite de paramètre d'une application.
Actuellement, lorsque je dis boite de paramètre, c'est un QDialog que j'appelle par l'intermédiaire d'un menu, et qui permet de changer quelques variables, qui sont généralement global aux programmes.
Je crois qu'il y a un QSettings, il faudrait que je me penche la dessus, mais si vous pouviez m'en dire quelques mots, et si cela convient bien à mon besoin, j'en serai enchanté. ( Sinon je peux lire la documentation vous allez me dire )
Revenons un peu mon problème ( que je n'ai toujours pas présenté ). Actuellement ma question est, comment faire pour envoyer les nouvelles valeurs des paramètres aux éléments de l'application qui en ont besoin.
Je ne suis pas sans solution:
- Des variables globales ( c'est toujours déconseillé )
- Un singleton qui permet de contenir les données ( c'est très très moyen ( dans le sens, mauvais ) )
- Des getteurs ( accesseurs ) sur la classe qui gère la boite de dialogue pour les préférences ( ça commence à être bien, mais la boite de dialogue à une durée de vie limitée, donc cela est finalement peut être dur à géré )
- Des signaux ( Je trouve ça une bonne idée )
- Obiwan Kenobi et Chuck Norris suffiront
Pour l'instant j'aime bien l'idée des signaux ( je peux changer du jour au lendemain ).
Mais comme la boite de dialogue est crée dans un slot de la fenêtre principale.
Le code donne ceci:
Avec des signaux cela sera du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void monSlot(void) { MyDialog dialog(); dialog.exec(); // Destruction immédiate }
Donc, on voit que je m'intéresse à la déconnexion des signaux, vu que ma boite va mourir juste après ( et aussi, parce que si l'utilisateur rappel la boite, on va refaire les mêmes signaux, et un jour je vais avoir des problèmes ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void monSlot(void) { MyDialog dialog(); connect(dialog, SIGNAL(newSetting()), element_that_need_it, SLOT(changedValue))); dialog.exec(); disconnect(dialog); // C'est très schématique // Destruction immédiate }
Qu'est ce que vous en pensez?
La solution des signaux est elle la meilleure? Est ce que mon implémentation est correcte, ou j'oublie un point important?
Merci pour votre aide.
Partager