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

C++ Discussion :

[GUI] Gestion des messages d'erreurs


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 93
    Points : 80
    Points
    80
    Par défaut [GUI] Gestion des messages d'erreurs
    Bonjour !

    J'ai un programme avec une interface graphique (Qt) et j'aimerais en fait savoir comment je peux créer une classe avec tous les messages d'erreurs avec une méthode statique qui me permet d'y accéder.

    La contrainte c'est que dans la classe où il y a le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void maFonction()
    {
        Test myTest = new Test();
        if(myTest->getValue() == 0)
            QMessageBox::information(0, "", "Une erreur est survenue");
    }
    Bah à la place de "Une erreur est survenue" , j'aimerais y mettre quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QMessageBox::information(0, "", UNKNOWN_ERROR);


    Pour l'instant j'utilise une liste mais c'est pas pratique car c'est pas parlant un numéro... je suis donc ici pour demander s'il existe un moyen de gérer tout ça bien proprement !!

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    J'ai pas compris si ton problème se résumait à définir une énumération de constantes, ou si c'est plus compliqué.

    Quel est le point qui pose problème dans ce que tu décris, précisément ?

  3. #3
    Membre régulier
    Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 93
    Points : 80
    Points
    80
    Par défaut
    En fait, l'application devient de plus en plus grosse. Donc mon problème c'est :

    -dois-je définir une énumération (j'avais oublié le mot merci maintenant je peux regarder dans "Le Langage C++" de B.S.)

    -vaut-il mieux laisser les messages d'erreurs explicites à l'endroit où ils sont (c'est-à-dire un peu partout dans le code) afin de voir exactement le message et ne pas devoir jongler avec les classes inutilement pour savoir quelle est l'erreure en question...

    voilà je sais pas si c'est plus clair

    En tous cas un grand merci pour avoir répondu !

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si le but de l'énumération n'est que de t'épargner l'écriture d'une chaîne en écrivant une constante, ça ne servira pas à grand chose si ce n'est limiter inutilement le contenu des messages d'erreur.

    Après si ça sert à autre chose, livre nous donc le fond de ta pensée

  5. #5
    Membre régulier
    Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 93
    Points : 80
    Points
    80
    Par défaut
    Oui, non en fait je comptais énumérer toutes les erreurs possibles du programme dans une seule classe que j'inclus partout.

    Ensuite quand je veux faire surgir une erreur, je fais en sorte d'avoir une string a partir de UNKNOW_ERROR (== "Unexpected error. Please send a bug report if you can.")

    Mais bon c'est pas très malin car j'aurais plus de mal à sauter de classes en classes pour modifier les messages d'erreur au lieu de le faire directement là ou l'erreur survient !

    (mais, néanmoins, est-ce que enum permet de faire ça ?)

    Si c'est pas clair tant pis on va pas trop se prendre la tête non plus puisque c'est loin d'être indispensable !

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu peux définir une énumération, mais ce ne seront que des constantes. Pour stocker les chaînes il te faudra une table qui associe constante -> chaîne.

    Donc non, définitivement ça n'a pas grand intérêt

  7. #7
    Membre régulier
    Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 93
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Laurent Gomila
    Tu peux définir une énumération, mais ce ne seront que des constantes. Pour stocker les chaînes il te faudra une table qui associe constante -> chaîne.

    Donc non, définitivement ça n'a pas grand intérêt
    Ok merci pour l'éclairage !

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Les énumérations dans ce contexte sont un piège à ... euh... on va dire un PAC.
    Le problème, c'est qu'au fur et à mesure que tu enrichiras ton appli et que tu la maintiendras, tu voudras sans cesse rajouter de nouvelles valeurs à l'énuméré et donc ... recompiler l'intégralité de ton projet. Quand la recompilation complète prend déjà une heure et demi, autant dire que ce n'est pas une bonne approche.

    Les deux véritables choix que je vois sont :
    - des identifiants (des chaines)
    - le message en dur dans le code.

    L'avantage du message en dur, c'est que tu vois tout dessuite ce que tu as voulu écrire. Et que c'est directement éditable.

    L'avantage de l'identifiant, c'est que c'est le moyen le plus simple pour gérer la localisation (un fichier de messages par langue (français, coréen, ...)). Il y a même moyen avec des trucs comme boost.format de spécifier des ordres pour d'éventuels paramètres. C'est aussi pratique pour passer le fichier à quelqu'un qui saura corriger les fautes d'orthographe et autre.

    Par contre, c'est lourd à utiliser.
    - difficile de se souvenir de l'identifiant que l'on veut utiliser (surtout quand il a un encodage à la noix et un numéro pour encore plus faciliter les choses )
    - Pénible à maintenir. "Tient, j'ai un message d'erreur ici. Mais qu'est-ce qu'il dit ? Ou il est le fichier ? C'est quel paramètre qui aurait dû être mis en premier ?"

    Autant dire que c'est la solution la plus proffessionnelle.
    Heureusement, avec un environnement de dev intelligent, il y a moyen de s'en sortir.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre régulier
    Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 93
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Luc Hermitte
    Les énumérations dans ce contexte sont un piège à ... euh... on va dire un PAC.
    Le problème, c'est qu'au fur et à mesure que tu enrichiras ton appli et que tu la maintiendras, tu voudras sans cesse rajouter de nouvelles valeurs à l'énuméré et donc ... recompiler l'intégralité de ton projet. Quand la recompilation complète prend déjà une heure et demi, autant dire que ce n'est pas une bonne approche.

    Les deux véritables choix que je vois sont :
    - des identifiants (des chaines)
    - le message en dur dans le code.

    L'avantage du message en dur, c'est que tu vois tout dessuite ce que tu as voulu écrire. Et que c'est directement éditable.

    L'avantage de l'identifiant, c'est que c'est le moyen le plus simple pour gérer la localisation (un fichier de messages par langue (français, coréen, ...)). Il y a même moyen avec des trucs comme boost.format de spécifier des ordres pour d'éventuels paramètres. C'est aussi pratique pour passer le fichier à quelqu'un qui saura corriger les fautes d'orthographe et autre.

    Par contre, c'est lourd à utiliser.
    - difficile de se souvenir de l'identifiant que l'on veut utiliser (surtout quand il a un encodage à la noix et un numéro pour encore plus faciliter les choses )
    - Pénible à maintenir. "Tient, j'ai un message d'erreur ici. Mais qu'est-ce qu'il dit ? Ou il est le fichier ? C'est quel paramètre qui aurait dû être mis en premier ?"

    Autant dire que c'est la solution la plus proffessionnelle.
    Heureusement, avec un environnement de dev intelligent, il y a moyen de s'en sortir.
    Merci pour ta réponse c'est précisément ce que je voulais savoir !

    Je dev sous Code::Blocks qui est le seul environnement qui m'a permet de faire quelque chose de bien à partir de connaissances plus ou moins vagues (en fait à la base j'ai appris le java... mais bon maintenant mon niveau en C++ en deux mois à atteind ce que j'ai appris en un an en java).

    Me conseillerais-tu Visual Studio 2005 Express ? Je sais pas si c'est le mieux pour coder multi-plateformes en plus...

    J'ai oublié de dire que je devais traduire l'application (en, fr). Ca serait donc gentil si tu pouvais me montrer un tuto ou un cours (ou n'importe quoi : exemple etc) qui utilise des identifiants. Je n'aurais qu'à choisir des identifiants longs et interminables pour correctement "voir" l'erreur c'est pas un problème. Puis tu as raison avec la compilation, c'est déjà plus pareil avec 4000 lignes de code : à présent j'y réfléchi à deux fois avant d'appuyer sur le bouton build (mais faut dire que ça porte ses fruits, je tente de faire un code plus rigoureux d'emblée).

    Bref je retire le tag résolu !

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Me conseillerais-tu Visual Studio 2005 Express
    Code::Blocks est très bien, Visual Studio 2005 Express aussi. Donc inutile de changer si tu es à l'aise avec le premier, surtout si cette question faisait suite à la remarque de Luc.

    Je sais pas si c'est le mieux pour coder multi-plateformes en plus...
    C'est toi qui écrit le code, pas l'EDI. Donc si tu écris un code portable il le sera avec VC++ tout autant qu'avec Code::Blocks.

    J'ai oublié de dire que je devais traduire l'application (en, fr). Ca serait donc gentil si tu pouvais me montrer un tuto ou un cours (ou n'importe quoi : exemple etc) qui utilise des identifiants
    Qt gère déjà très bien la localisation, il suffit d'utiliser la macro tr() lorsque tu veux utiliser une chaîne devant tenir compte de la localisation. Jette un oeil à la doc si tu n'es pas familier avec tout ça (mot-clé : Qt Linguist Manual).

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    VC est très bien. Mais.., utilise ce avec quoi tu es à l'aise.
    Si je parlais d'environnement intelligent, c'est parce que je pense qu'avec vim en moins d'une heure j'ai un plugin qui m'affiche dans une fenêtre de préview le message d'erreur associé au tag sur lequel j'ai activé une combo de touches. Ce doit être pareil pour quelqu'un qui connait bien emacs et son lisp.


    Concernant un tuto. Désolé, je n'ai rien de tout cela. Il faut voir qu'en général certaines API de fenétrage viennent avec des systêmes de localisation.
    Dans le standard, il y a un truc qui va dans ce sens -> http://gcc.gnu.org/onlinedocs/libstd.../messages.html -- ou alors, c'est fortement lié à gettext ?
    Combiné avec boost.format (pour gérer les substitutions de paramètres), il doit y avoir moyen de mettre en oeuvre un truc sympa.

    Sinon, jusqu'à présent je n'ai croisé que des impléméntations propriétaires, un coup qui va piocher dans un fichier de conf et qui repose sur une focntion de log propriétaire, un coup qui va piocher dans un fichier de messages XMLisant, ...
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Membre régulier
    Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 93
    Points : 80
    Points
    80
    Par défaut
    Pour la localisation avec Qt ça n'a pas l'air trop prise de tête (au contraire).

    Pour les messages d'erreurs je vais les coder en dur et puis c'est tout hein !

    Merci pour vos réponses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des messages d'erreur
    Par ymoreau dans le forum Qt
    Réponses: 10
    Dernier message: 16/08/2010, 21h48
  2. [AC-2007] Gestion des messages d'erreur
    Par elric dans le forum IHM
    Réponses: 11
    Dernier message: 05/11/2009, 11h30
  3. Réponses: 3
    Dernier message: 06/11/2007, 19h15
  4. Réponses: 2
    Dernier message: 12/10/2006, 23h36
  5. gestion des messages d'erreurs
    Par keibenoit dans le forum Access
    Réponses: 2
    Dernier message: 31/05/2006, 14h49

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