IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxWidgets Discussion :

C++ versus wxWidgets


Sujet :

wxWidgets

  1. #1
    Membre averti Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Points : 358
    Points
    358
    Par défaut C++ versus wxWidgets
    Bonjour,
    J'ai une question qui me chiffonne un peu...
    Dans un programme en C++ on inclut des messages d'erreur par ex. lors d'une non-ouverture d'un fichier.
    - Cependant dans wxWidgets cela est dejà prévu si je ne me trompe. (la classe de manipulation de fichiers)

    Faut-il vraiment reécrire le code si on veut utiliser wxWidgets ou existe-il un moyen afin d'avoir un message pop-up lors d'une erreur ?

    Voici mon C++:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!f2.write((char *)&rec,(unsigned)sizeof(int))) cout<<"Write REC failed !"<<endl ;
    amicalement

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Je ne sais pas si cela répondra complètement à ton problème, mais tu peux déjà regarder autour de wxLog pour ce qui est d'informer l'utilisateur d'erreurs.

  3. #3
    Membre averti Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Points : 358
    Points
    358
    Par défaut
    Bonjour,
    je me suis mal exprimé...
    J'ai donc transformé un programme en C vers du C++, dont un exemple de code dans le 1er message.
    Je voudrais maintenant utiliser les wxWidgets, mais d'après mes recherches dans les classes de wx il y a déjà de quoi ( file handling) prévu, non ?
    Donc:
    1- soit je reécris le programme avec la librairie de wx
    2- soit je trouve un moyen de tranformer le "cout" qui est un avertissement d'erreur comme on peut constater, dans un pop-up de fenêtre ou autre.
    3- soit je me fais quelques classes moi-même afin d'en sortir rapidement.

    Si possible j'aimerais plustôt la solution 2 pour laquelle je demande un peu d'aide.

    amicalement
    PS: je vais quand-même regarder ce que ce wxLog fait exactement.

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Bonjour,

    Oui c'est possible pour la version ‘2’ de le faire évoluer pour le sortir dans une fenêtre de log.

    Il faut créer un 'wxTextCtrl' avec l'option 'wxTE_MULTILINE'.

    Puis l'utiliser de cette manière.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Ajouter le textctrl dans du GUI
    wxTextCtrl *mTextLog = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 60), wxTE_MULTILINE|wxTE_READONLY); 
     
    ....// ailleurs
     
    if(mTextLog )
    	*mTextLog << log << L"\n";

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Je vais insister avec mon wxLog:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!f2.write((char *)&rec,(unsigned)sizeof(int))) cout<<"Write REC failed !"<<endl ;
    Peut devenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(!f2.write((char *)&rec,(unsigned)sizeof(int))) 
                  wxLogMessage("Write REC failed !");
    L'avantage, c'est que tu peux configurer pour que tout ça aille vers un fichier (wxLogStderr ou wxLogStream), vers une fenêtre console (wxLogWindow), vers un TextControl de ton IHM (wxLogTextCtrl), vers la solution la plus adéquate (wxLogGui) ou vers ton propre système de log (CMonLog:: public wxLog). Ils peuvent être différents en debug et release ou même être activés et modifiés dynamiquement. Que du bonheur
    L'inconvénient, c'est que tu ne bénéficie pas des opérateurs '<<' et qu'il te faut tout réécrire à la sauce wxLogMessage(format, arguments).

  6. #6
    Membre averti Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Points : 358
    Points
    358
    Par défaut
    Merci pour les hints...
    Je vais essayer les 2 propositions.
    Je commence par: wxLogMessage("Write REC failed !");
    et là j'ai l'erreur
    cannot convert 'const char*' to 'const wxChar*' for argument '1' to 'void wxLogMessage(const wxChar*, ...)'

    Je vois pas très bien ce que wxChar* fait la dedans vu que: void wxLogMessage (const char * formatString,.... )
    ( j'ai bien inclus le wx/log.h bien sûr)
    Attention: je parle d'une fonction externe 'makedata' en c++ qui est appelée lors d'un 'button event', si cela pourrait avoir une influence pour le wxWidget.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Probablement un pb wchar/char. Il faut utiliser wxT():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wxLogMessage(wxT("Write REC failed !"))

  8. #8
    Membre averti Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Points : 358
    Points
    358
    Par défaut
    Merci, ça marche impec, mais..
    - de où vient ce wxT ( trouve pas dans la doc ni le pdf )
    - peut-on modifier la fenêtre ?
    amicalement

  9. #9
    Membre averti Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Points : 358
    Points
    358
    Par défaut
    Citation Envoyé par mess-mate Voir le message
    - de où vient ce wxT ( trouve pas dans la doc ni le pdf )
    Pour le wxT... c'est un macro défini dans wxchar.h.
    /* although global macros with such names are normally bad, we want to have another name for _T() which should be used to avoid confusion between _T() and _() in wxWidgets sources */
    et
    /* define wxFoo() function for each standard foo() function whose signature (exceptionally including the return type) includes any mention of char: wxFoo() is going to be a Unicode-friendly version of foo(), i.e. will have the same signature but with char replaced by wxChar which allows us to use it in Unicode build as well */
    amicalement

  10. #10
    Membre averti Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Points : 358
    Points
    358
    Par défaut
    Bonsoir,
    je voudrais tester cette solution du fait qu'elle pourrait rester dans la même fenêtre.
    Mais ....
    Citation Envoyé par Ti-R Voir le message
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Ajouter le textctrl dans du GUI
    wxTextCtrl *mTextLog = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 60), wxTE_MULTILINE|wxTE_READONLY); 
     
    ....// ailleurs
     
    if(mTextLog )
    	*mTextLog << log << L"\n";
    *mTextLog qui est un control me pose problème de déclaration quoi que je fasse du genre 'invalid operands of types'.

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    As-tu rajouté le bon include?

  12. #12
    Membre averti Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Points : 358
    Points
    358
    Par défaut
    Bonjour,
    selon la doc: http://docs.wxwidgets.org/trunk/classwx_text_ctrl.html et autres.
    j'ai ajouté wx/log.h; wx/textctrl.h et iostream à tout hasard.
    Je suis sous debian et C::B.

  13. #13
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Petite amélioration pour le support Unicode et non-Unicode du code
    Remplacer le 'L' par 'wxT()'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(mTextLog )
    	*mTextLog << log << wxT("\n");
    Sinon recopie nous le message d'erreur... là je ne vois pas, j'aurais dis comme 3DArchi, il manque l'include (voir le code n'est pas unicode :-/ mais moins probable)...

  14. #14
    Membre averti Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Points : 358
    Points
    358
    Par défaut
    Voilà le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Codeblocks/FilDat/FilDatMain.cpp: In constructor 'FilDatFrame::FilDatFrame(wxWindow*, wxWindowID)':
    Codeblocks/FilDat/FilDatMain.cpp:85: error: 'mTextLog' was not declared in this scope
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    wxTextCtrl* TextCtrl1; // déclare dans la FilDatMain.h
    TextCtrl1 *mTextLog = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 60), wxTE_MULTILINE|wxTE_READONLY);
    FlexGridSizer1->Add(TextCtrl1, 3, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL);
    Arrêt de la compilation avec 1 erreur.

  15. #15
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    wxTextCtrl* TextCtrl1; // déclare dans la FilDatMain.h
    TextCtrl1 *mTextLog = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 60), wxTE_MULTILINE|wxTE_READONLY);
    FlexGridSizer1->Add(TextCtrl1, 3, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL);
    A transformer en


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // FilDatMain.h
    wxTextCtrl* TextCtrl1;
     
    // Dans le contructeur déclaré dans FilDatMain.cpp ou .h
    TextCtrl1 = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 60), wxTE_MULTILINE|wxTE_READONLY);
     
    FlexGridSizer1->Add(TextCtrl1, 3, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL);

  16. #16
    Membre averti Avatar de mess-mate
    Inscrit en
    Septembre 2008
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 352
    Points : 358
    Points
    358
    Par défaut
    Merci, la seule différence maintenant c'est que *mTextLog a disparu.
    Mais il reste toujours dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(mTextLog )
    	*mTextLog << log << wxT("\n");
    Je suis perplexe qu'il faut éliminer ce pointeur car selon la doc tu était pourtant dans le vrai ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    But wxWidgets provides a convenient class to make it even simpler so instead you may just do
     
      #include <iostream>
     
      wxTextCtrl *control = new wxTextCtrl(...);
     
      wxStreamToTextRedirector redirect(control);
     
      // all output to cout goes into the text control until the exit from current
      // scope

Discussions similaires

  1. [Débat] MERISE versus UML ? Avenir de MERISE ?
    Par Matthieu Brucher dans le forum Méthodes
    Réponses: 51
    Dernier message: 15/02/2022, 17h32
  2. C# versus Java
    Par laffreuxthomas dans le forum C#
    Réponses: 368
    Dernier message: 30/03/2019, 22h59
  3. Que choisir : PHP versus Java ?
    Par Sniper37 dans le forum Général Conception Web
    Réponses: 164
    Dernier message: 28/04/2009, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo