Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
853 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [wxWidgets] Communication entre les fenetres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[wxWidgets] Communication entre les fenetres

n°1273767
ritzle
Posté le 27-12-2005 à 16:27:03  profilanswer
 

bonjour,
 
J'ai un simple programme en C++ utilisant wxWidgets. La Frame principale permet d'ouvrir une boite de dialogue de configuration ressemblant à ceci :
http://www.pixee.net/mini/paramconnect.jpg
 
Lorsque l'on clique sur OK, je veux pouvoir enregistrer les modifications dans un fichier, et que la Frame principale puisse lire la configuration, que ce soit juste après la validation des paramètres ou au démarrage du programme.
 
Je ne demande pas de code, mais plutôt la méthode pour faire tout ca.
Est-ce la fenêtre fille qui écrit dans le fichier, ou la parente ? Dans le premier cas, comment la parente lit-elle les paramètres de connexion ? Dans le second cas, comment la fille transmet-elle les données à la fenêtre parente ?
 
Merci :jap:

Message cité 1 fois
Message édité par ritzle le 27-12-2005 à 16:27:47
mood
Publicité
Posté le 27-12-2005 à 16:27:03  profilanswer
 

n°1273801
sankukai8
Posté le 27-12-2005 à 17:24:42  profilanswer
 

ritzle a écrit :

bonjour,
 
J'ai un simple programme en C++ utilisant wxWidgets. La Frame principale permet d'ouvrir une boite de dialogue de configuration ressemblant à ceci :
http://www.pixee.net/mini/paramconnect.jpg
 
Lorsque l'on clique sur OK, je veux pouvoir enregistrer les modifications dans un fichier, et que la Frame principale puisse lire la configuration, que ce soit juste après la validation des paramètres ou au démarrage du programme.
 
Je ne demande pas de code, mais plutôt la méthode pour faire tout ca.
Est-ce la fenêtre fille qui écrit dans le fichier, ou la parente ? Dans le premier cas, comment la parente lit-elle les paramètres de connexion ? Dans le second cas, comment la fille transmet-elle les données à la fenêtre parente ?
 
Merci :jap:


tu pourrais passer tes parametres par reference dans le constructeur de ta boite de dialogue:
par exemple:
 

Code :
  1. class Dialog : public wxDialog
  2. {
  3. public:
  4.     Dialog(wxWindow* parent, wxWindowID id, const wxString& title, Taclass &data );
  5. .....
  6. .....


 
puis lorsque tu clique ok dans la boite de dialogue tu en profites pour les enregistrer dans un fichier,tu refiles toutes les données dans data que tu recuperes alors dans la mainframe. et voilou.
 
qu'en penses tu?
 
 

n°1273804
ritzle
Posté le 27-12-2005 à 17:29:41  profilanswer
 

pas mal, mais quand je démarre le programme (donc la fenetre fille n'est pas appelée), comment je récupère les données depuis la mainframe ? Si je dois lire dans le fichier, alors autant le faire systématiquement plutôt que de passer les paramètres par référence

Message cité 1 fois
Message édité par ritzle le 27-12-2005 à 17:35:06
n°1273813
sankukai8
Posté le 27-12-2005 à 17:46:51  profilanswer
 

ritzle a écrit :

pas mal, mais quand je démarre le programme (donc la fenetre fille n'est pas appelée), comment je récupère les données depuis la mainframe ? Si je dois lire dans le fichier, alors autant le faire systématiquement plutôt que de passer les paramètres par référence


 
comprend pas bien  :??:  :??:  
si ta boite de dialogue n'est pas appelée au demarrage, elle n'existe pas, donc pas possible d'y lire les données, non?
 
moi je ferais un test au demarrage pour voir si ton fichier de config existe. si il existe, tu y lis les données, sinon tu lance automatiquement la boite de dialogue.
 
je pense qu'il est preferable de passer les données par references malgré tout car cela doit etre plus rapide et efficace que de relire dans le fichier que tu auras créé.
 

n°1274237
ritzle
Posté le 28-12-2005 à 22:38:26  profilanswer
 

Je vais faire comme tu me l'as suggéré, merci pour ton aide.
 
J'ai encore un problème, c'est pour les boutons radio. Pour l'instant tous mes boutons radio ont l'air reliés entre eux, quand je coche l'un d'eux les autres se décochent, or je veux plusieurs "zones"
J'utilise la classe wxRadioButton, mais à priori il faut d'abord utiliser wxRadioBox, le problème est que je ne sais pas comment faire, la documentation est minable et je n'ai pas trouvé d'exemple de code qui pourrait m'aider. Quelqu'un pourrait m'expliquer ?

n°1274283
sankukai8
Posté le 29-12-2005 à 07:49:06  profilanswer
 

ritzle a écrit :

Je vais faire comme tu me l'as suggéré, merci pour ton aide.
 
J'ai encore un problème, c'est pour les boutons radio. Pour l'instant tous mes boutons radio ont l'air reliés entre eux, quand je coche l'un d'eux les autres se décochent, or je veux plusieurs "zones"
J'utilise la classe wxRadioButton, mais à priori il faut d'abord utiliser wxRadioBox, le problème est que je ne sais pas comment faire, la documentation est minable et je n'ai pas trouvé d'exemple de code qui pourrait m'aider. Quelqu'un pourrait m'expliquer ?


 
pour pouvoir creer plusieurs groupes de radiobutton, il suffit de preciser  wxRB_GROUP en creant le bouton:
exemple:

Code :
  1. RadioBouton1 = new wxRadioButton(this,id_bt1,"Un",wxPoint(10,10), wxDefaultSize,wxRB_GROUP);
  2. RadioBouton2 = new wxRadioButton(this,id_bt2,"Deux",wxPoint(10,30));
  3. //1 et 2 sont dans le meme groupe. on ne peut qu'en choisir un parmi les 2
  4. RadioBouton3 = new wxRadioButton(this,id_bt3,"Trois",wxPoint(10,50), wxDefaultSize,wxRB_GROUP);
  5. // 3 est dans un 2eme groupe,il peut etre selectionné en plus de 1 ou 2


 
c'est dans la doc de wxWidgets, pas si mal faite que ca :hello:


Message édité par sankukai8 le 29-12-2005 à 07:55:00
n°1274335
ritzle
Posté le 29-12-2005 à 10:56:36  profilanswer
 

Je te remercie. On va mettre ça sur le fait que je ne suis pas encore très à l'aise avec wxWidgets :ange:

n°1275686
ritzle
Posté le 02-01-2006 à 01:03:58  profilanswer
 

sankukai8 a écrit :


Code :
  1. class Dialog : public wxDialog
  2. {
  3. public:
  4.     Dialog(wxWindow* parent, wxWindowID id, const wxString& title, Taclass &data );
  5. .....
  6. .....


 
puis lorsque tu clique ok dans la boite de dialogue tu en profites pour les enregistrer dans un fichier,tu refiles toutes les données dans data que tu recuperes alors dans la mainframe. et voilou.


Maintenant j'ai un problème avec la récupération des données dans la mainframe.
J'ai cree un evenement lors du clic sur OK, qui execute la fonction OnOK (void Dialog:: OnOK(wxCommandEvent& event); ) sensée modifier les données dans data. Le problème c'est que ma fonction ne connait pas l'objet data, vu que c'est uniquement au constructeur qu'il est transmis.
 
Comment dois-je faire ?

n°1275687
ritzle
Posté le 02-01-2006 à 01:11:10  profilanswer
 

Code :
  1. class Dialog : public wxDialog
  2. {
  3. public:
  4.     Dialog(wxWindow* parent, wxWindowID id, const wxString& title, Taclass &data );
  5.     Taclass data;
  6. .....
  7. .....


Avec ce code toute ma classe Dialog "voit" l'objet data et ses données, mais quand je retourne à la mainframe rien n'a changé pour elle.
Est-ce que je suis sur la bonne voie ou je me plante complètement ?

Message cité 1 fois
Message édité par ritzle le 02-01-2006 à 01:11:41
n°1275724
sankukai8
Posté le 02-01-2006 à 07:37:51  profilanswer
 

ritzle a écrit :

Code :
  1. class Dialog : public wxDialog
  2. {
  3. public:
  4.     Dialog(wxWindow* parent, wxWindowID id, const wxString& title, Taclass &data );
  5.     Taclass data;
  6. .....
  7. .....




Que fait le Taclass data; ici? tu redefinis un objet Taclass alors qu'il est deja passé par reference dans le constructeur. il ne doit pas y etre. tu as acces a data directement sans le redefinir.
 
poste un extrait de ton code pour voir plus precisement

mood
Publicité
Posté le 02-01-2006 à 07:37:51  profilanswer
 

n°1275777
ritzle
Posté le 02-01-2006 à 11:38:19  profilanswer
 

voilà la partie concernée :
 

Code :
  1. Dialog::Dialog(wxWindow* parent, wxWindowID id, const wxString& titre, Config &data )
  2.                   : wxDialog(parent,id,titre,wxDefaultPosition,wxSize(240, 500))
  3. {
  4.    
  5.     //J'ai acces sans probleme à data
  6.     data.SetPseudo( wxT("Truc" ) );
  7.    
  8. }
  9. void Dialog::OnOK(wxCommandEvent& event)
  10. {
  11.    
  12.     //Mais ici le compilateur me dit : 'data' undeclared
  13.     data.SetPseudo( wxT("Machin" ) );
  14.    
  15. }


 
en fait je n'ai pas accès à l'objet 'data' dans les méthodes de 'Dialog'

n°1275806
sankukai8
Posté le 02-01-2006 à 12:51:21  profilanswer
 

Code :
  1. void Dialog::OnOK(wxCommandEvent& event)
  2. {
  3.    
  4.     //Mais ici le compilateur me dit : 'data' undeclared
  5.     data.SetPseudo( wxT("Machin" ) );
  6.    
  7. }


normal, car data ne fait pas partie de Dialog.Mais cette partie ne sert a rien. En effet lorsque tu construis ta boite de dialogue, tu devrais plutot faire:

Code :
  1. Dialog dialog(NULL,-1,"Titre",data);
  2.      if ( dialog.ShowModal() == wxID_OK ) // ceci est true si tu appuies sur le bouton ok
  3.          {
  4.         //ici tu as acces a data sans probleme   
  5.          }


note: tu n'es meme pas obligé de passer data par reference, car lorsque tu appelles dialog.showmodal, tu dois normalement te trouver dans une des methodes de la mainframe, et donc tu dois avoir ton data deja créé dans la mainframe qui est accessible.


Message édité par sankukai8 le 02-01-2006 à 12:51:37
n°1275810
ritzle
Posté le 02-01-2006 à 12:59:37  profilanswer
 

C'est ce que j'ai fait, mais je veux recuperer les données tapées par l'utilisateur dans 'dialog'
à la limite je peux faire :

Code :
  1. Dialog dialog(NULL,-1,"Titre",data);
  2. if ( dialog.ShowModal() == wxID_OK ) // ceci est true si tu appuies sur le bouton ok
  3. {
  4.        
  5.         data.SetPseudo( dialog.ChampPseudo1->GetValue() );
  6.        
  7. }


mais ca suppose que le wxTextCtrl *ChampPseudo1 soit public (et ce n'est pas très "propre" à priori...)


Message édité par ritzle le 02-01-2006 à 13:00:22
n°1275820
sankukai8
Posté le 02-01-2006 à 13:16:49  profilanswer
 

Code :
  1. Dialog::Dialog(wxWindow* parent, wxWindowID id, const wxString& titre )
  2.                  : wxDialog(parent,id,titre,wxDefaultPosition,wxSize(240, 500))
  3. {
  4. // tout ce qu'il faut
  5. }
  6. void Dialog::GetValue(Config &shmurtz)
  7. {
  8.    
  9.    shmurtz.SetPseudo( wxT("Machin" ) );
  10. //remplis ton shmurtz de tout ce qu'il faut
  11.    
  12. }


 
puis  

Code :
  1. Dialog dialog(NULL,-1,"Titre" );
  2.       if ( dialog.ShowModal() == wxID_OK )
  3.       {
  4.             dialog.GetValue(data) ;
  5. // data est defini dans la mainframe
  6.       }



Message édité par sankukai8 le 02-01-2006 à 13:17:44
n°1275844
ritzle
Posté le 02-01-2006 à 14:00:12  profilanswer
 

parfait, merci beaucoup :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [wxWidgets] Communication entre les fenetres

 

Sujets relatifs
Téléphones portables + Bluetooth + CommunicationCréer et enregister une image avec wxwidgets
ULIMIT ou autre : Script anti fenetres ???ULIMIT : Qui veut un script anti fenetres ???
[Java] Aide sur projet avec interface graphique ( Pas des fenêtres)problème de communication word/access
wxWidgets et wxScrollBar et wxTextCtrlCommunication entre 2 programmes
wxwidgets et flux videoCommunication applet javascript
Plus de sujets relatifs à : [wxWidgets] Communication entre les fenetres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR