Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Relecteurs Correcteurs Formateurs

Bonjour à tous,

Etant complètement novice en c++, mais réalisant un projet assez costaud, je me demande s'il n'y aurait pas une âme charitable pour lire et corriger mon projet. Car, même si tout fonctionne (même s'il n'est pas terminé), j'aimerais voir quelles sont mes erreurs, ce que j'ai mal écrit, pour en apprendre d'avantage. Je sais que je ne fais pas grand chose de conventionnel et qu'il y a déjà pas mal de pages à corriger .... je sais aussi que cela est particulièrement chronophage ... mais ... J'aimerais bien tester le coup. Si quelqu'un est intéressé ...

Réponses

  • Pas forcément le temps de tout lire dans le détail, mais je peux donner mon avis, pas de soucis.
  • 5 Jan modifié
    Génial !!!!
    Le top serait que tu puisses executer cela en static sur Windows pour voir à quoi cela ressemble.
    L'objectif final est d'arriver à faire cela http://www.liberkey.com/fr.html pour des employés du secteur public.
    Ce que je vais te filer n'est que la première partie du programme, la partie 12 correspondant au lanceur de programme.
    Comment je fais pour te filer cela discretos ? le projet est open source, mais mon serveur FTP non ;)
  • 5 Jan modifié
    tu peux envoyer le projet à ***@***

    (message modifié par papajaac, en espérant qu'un robot n'ait pas noté ton adresse mail ;) )
  • ok, c'est fait.
    Merci beaucoup.
  • Bien reçu,
    Je regarde ça au calme ce soir.
  • Bonsoir,
    Alors un commentaire sur la compilation du projet.
    Plusieurs signaux ont été déclarés sans void, avec mon compilo ça passe pas.
    Ensuite, on utilise plutôt l'anglais pour coder. Mais ce n'est pas oblgatoire ;)
    En parcourant le code, j'ai remarqué que des dll étant copiée dans le répertoire system32 ou systemwow64,
    perso je préconise plutôt de les copier à la racine du logiciel qui les utilisera, car ton soft devra être lancé en mode admin pour fonctionner, et des puritains comme moi n'aiment pas trop les softs qui trafiquent dans le système :D

    Alors ce soir je commence petit, je vais commenter la classe Etape01.

    1) je n'aime pas trop le
    #include <QtWidgets>
    car il inclut 130 autres fichiers
    préféré
    #include <QWidget>
    et rajouter les includes que tu as besoin dans le .cpp

    2) avec la dernière norme on peut éviter le 0 ou le NULL pour les pointeurs. Tu peux utiliser la macro Q_NULLPTR ou nullptr.
    genre
    Etape01(QWidget *parent = 0);
    devient
    Etape01(QWidget *parent = Q_NULLPTR);
    3) ta classe Etape2 utilise des membres statiques pour logger le déroulement de l'appli. Perso j'aurai fait une autre classe pour ça. Je ne trouve pas très logique que ce soit le contructeur de la classe qui fasse le qInstallMessageHandler.

    4) Tu utilises trop de pointeurs, pour QFile, QTextStream, surtout que tu ne te sers pas du QTextStream* out déclaré dans le .h et que tu ne delete pas les pointeurs après utilisation.

    5) tu as plusieurs classes Etape0, Etape1, Etape2, ... qui ont un signal identique, toutes un QTextEdit, peut-être que faire une classe Etape et dériver Etape1, Etape2, ... de cette classe

    Voilà quelques remarques pour commencer. Suite au prochain épisode ;)
  • Je comprends très bien le point 1)
    Pour le point 2), j'aime bien les 0, c'est clair, ça parle à tous le monde, mais je vais m'adapter.
    Pour le point 3), Tu parles de Etape01 !! En toute franchise, je ne comprends pas cette classe que tu m'as aidé à écrire. Je suis incapable de la modifier tout seul car elle contient plein de choses qui me dépassent. Comment une classe fille peut-elle intercepter tous les qMessages de la classe mère ? Plus quelques variables globales (si je ne me trompe pas de terme). Mes capacités sont atteintes.
    Pour le point 4), tu as parfaitement raison, je commence seulement à m'en rendre compte. Pour moi, c'était juste plus classe de procéder ainsi. Mais avec tous les bugs que je rencontre, je recherche l'isolation de mes fonctions et de mes classes. J'apprends.
    Pour le point 5), je vois effectivement un problème de raisonnement, mais je ne sais comment le traduire en c++.
    Finalement, mes étapes sont des étapes et non des objets (gros problème). Cependant, la suite d'étape est tellement importante qu'il me faut bien les segmenter. Je crois que j'aurais dû tout faire en mode console non ???

    Merci ENORMEMENT pour ces premiers commentaires, je corrige ...
  • Salut,
    très brièvement ce soir, (je posterai plus longuement la semaine prochaine)
    pour le point 2) je conseille justement nullptr car 0 est un entier, tout comme NULL. On retire toute ambiguïté, cast non voulu avec nullptr. L'avantage de Q_NULLPTR est qu'il utilisera nullptr ou NULL selon l'ancienneté du compilateur.
    3) je parlais effectivement de Etape1, j'ai tapé trop vite. Dans Etape1 tu instancies une zone de texte qui est utilisé par la méthode passée en paramètre du qInstallMessageHandler. Donc cela reroute toutes les sorties (debug, warning, fatal, ...) vers ton textEdit. Par contre, quand tu passes à Etape2, tu instancies un autre TextEdit qui ne reçoit pas les messages, mais qui est positionné par dessus le premier. A ce moment là, tu perds l'intérêt du premier.
    5) je te ferai un petit exemple pour lundi.
    Finalement, mes étapes sont des étapes et non des objets
    Si justement, ce sont bien des objets et c'est bien d'avoir fait plusieurs classes (une par étape)
    Ta classe Etape0 est une animation, on peut se demander si c'est vraiment une étape, mais pourquoi pas ,
    Etape1 ne devrait pas être une classe Etape car elle installe juste le message handler, mais pour les autres c'est justifié.

    Pour le mode console, je suis pas sûr, moins lisible pour l'utilisateur, de plus, pas beaucoup de différence entre une application cli et gui dans ton cas car tu utilises seulement des textEdit pour afficher des messages. Donc rien à changer sur la méthode à ce niveau là.
  • A ce moment là, tu perds l'intérêt du premier.
    En fait, grâce à dispatch, je peux accéder à toutes les étapes en temps réel grâces aux boutons positionnés sur l'interface (aucune étape n'est deletée avant la clôture du programme). Chaque bouton hide toutes mes classes sauf celle que je veux voir. Je peux donc toujours regarder mes qMessages et mes Settings. De la même façon, peut-importe ce que fais l'utilisateur (clique sur les boutons), le programme reprendra la main pour déclencher l'étape suivante si besoin (si je regarde etape01 et que le programme passe à l'étape10, il le fera sans le consentement de l'utilisateur (ce qui n'est pas anormal lors d'une installation)).

    Merci beaucoup.
    J'attends la suite avec impatience.
  • Salut,
    j'ai commencé à coder vite fait (hier soir devant la télé) un petit exemple de gestion des étapes, je le posterai ce soir en finissant toujours devant la télé ;)
  • Salut,
    voici un mini projet qui gère juste la fenêtre de output (que j'ai nommé MessageHandler)pour l'application, ainsi que le squelette des classes Etape (que j'ai nommé Step)
    ta classe Dispatch est devenue la classe Factory (elle ne fait qu'instancier les classes héritant de Step (FirstStep, SecondStep, ...) )
    Les classes XXXStep ne font quasi rien (juste un appendText dans leur méthode runStep()). C'est dans cette méthode qu'il faut mettre le code à exécuter.
    rar
    rar
    dispatch.rar
    21K
  • Je vais regarder cela :D
    Merci énormément pour ce boulot !!!!
    J'en ai pour quelques semaines ... en toute franchise.
    babaOroms, si tu as le temps, tu peux regarder cette discussion :
    http://forum.qtfr.org/discussion/19463/quelle-heure-est-il-qfileinfo-created#latest
    Ta classe MyFile vide littéralement chacun de mes fichiers (mais avec la bonne date).
    Si tu peux faire quelque chose .... je t'en serais entièrement redevable (comme d'hab, me diras tu).
  • Sinon, penses-tu que ma façon de faire avec le Ftp soit la bonne ?
    Car si oui, je clôt le sujet.
Connectez-vous ou Inscrivez-vous pour répondre.