Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programme subitement arrêté...

    10 février 2019 à 1:24:45

    Salut à tous..

    Quand je lance mon projet dans Qt .. Il prends un peu de temps et la partie "Sortie de l'Application" clignote ce qui veut dire que tout se passe bien. Mais rien ne s'affiche et le Message "Vote Programme s'est subitement arrêté".

    Je ne sais pas quel problème l'IDE peut bien avoir..

    Avez vous une idée ? 

    Merci

    • Partager sur Facebook
    • Partager sur Twitter

    Rendez vous là où il n'y a pas de chemin et laisser vos traces....

      10 février 2019 à 2:37:16

      Bonjour,

      Manque d'informations. On a ni code, ni .pro, ni code d'erreur, ni infos sur votre configuration.

      Pensez-vous pouvoir donner quelques détails supplémentaires ?

      Merci bien

      • Partager sur Facebook
      • Partager sur Twitter
        10 février 2019 à 9:37:53

        Oui Oui ... 

        Le fichier.pro

        Le main.cpp

        Le mainwindow.h

        Le mainwindow.cpp

        Voila les fichiers du programme... 

        • Partager sur Facebook
        • Partager sur Twitter

        Rendez vous là où il n'y a pas de chemin et laisser vos traces....

          10 février 2019 à 11:27:16

          Salut,

          Alors, déjà, quand "sortie de l'application" se met à clignoter, cela ne veut absolument pas dire que "tout se passe bien"...

          Cela veut juste dire que tu disposes d'un exécutable, qu'il est exécuté, et "qu'un (ou plusieurs) message(s)" a été affiché.

          Si tu clique sur "sortie de l'application", tu devrais voir le(s) message(s) qui ont été affiché(s).

          Ensuite, au lieu de faire des impressions écran pour nous donner ton code, pourrais tu faire un copier / coller de celui-ci en utilisant le bouton en forme de < / >?  Cela facilitera énormément la vie de tout le monde, entre autres, en permettant "à qui le souhaite" de faire lui-même un copier / coller.

          Enfin, c'est bien gentil de nous donner une copie écran qui nous montre que tu as définis quatre fonction dans ton fichier mainwindow.cpp.  mais ce qui aurait encore été beaucoup plus utile, ca aurait été de nous donner ... le code que tu as écrit pour ces fonction, car c'est la seule chose qui nous permettra de t'aider (raison pour laquelle nous demandons un copier collé du code).

          De même, cela aurait été sympa de nous donner la définition complète de ta classe MainWindow (le code complet du fichier mainwindow.h), pour les même raisons.

          Ceci étant dit:

          Ton impression écran (au niveau de mainwindow.h) nous indique déjà que le compilateur se plaint qu'il n'y a aucun destructeur virtuel pour ta classe mainwindow.  Tu devrais déjà commencer par corriger ce point, en le déclarant sous la forme de

          virtual ~mainwindo();

          dans le fichier mainwindow.h et en le définissant sous a forme de

          mainwindow::~mainwindow(){
          
          }

          dans le fichier mainwindow.cpp.

          Il y a peu de chance pour que cela suffise à corriger ton problème.  Mais disons qu'il est toujours particulièrement intéressant de veiller à corriger les avertissements émis par le compilateur.

          Il faut en effet savoir que, quand le compilateur émet un avertissement, c'est parce qu'il a rencontré du code qu'il doit accepter (parce qu'il respecte la syntaxe et la grammaire du langage), mais dont la traduction dans l'application a une grosse probabilité de ne pas réagir tel que tu l'espères lors de l'exécution.

          La règle est donc de corriger tous les avertissements qui seront émis par le compilateur ;)

          Enfin si la compilation se passe "sans problème", mais que ton application s'arrête brutalement, c'est très souvent (mais pas uniquement) dû à l'utilisation d'un pointeur invalide.

          Etant donné la simplicité de ton projet, j'aurais tendance à dire que c'est sans doute parce que certains pointeurs déclarés au niveau de ta classe mainwindow n'ont pas été correctement définis (dans le constructeur, entre autres).

          Mais comme nous n'avons toujours pas le code complet de mainwindow.h et du constructeur, il nous est totalement impossible de trouver la raison exacte de ton problème, et je suis donc réduit à faire des suppositions basées sur mon expérience des forums et des erreurs classiques commises par les débutants :p

          • Partager sur Facebook
          • Partager sur Twitter
          Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
            10 février 2019 à 12:28:19

            Hi koala01

            J'ai pris en compte des diverses remarques et cela ne se reproduira plus.  

            Au passage Merci pour les conseils. 

            Et donc voici la copie des codes de chaque fichier :

            Le fichier.pro

            QT+=widgets
            
            SOURCES+=\
            main.cpp\
            MainWindow.cpp
            HEADERS+=\
            MainWindow.h
            RESOURCES+=\
            cnn.qrc
            



            Le mainwindow.h
            <#ifndefMAINWINDOW_H
            #defineMAINWINDOW_H
            #include<QtWidgets>
            #include<QMainWindow>
            #include<QMenuBar>
            #include<QToolBar>
            QT_BEGIN_NAMESPACE
            classQAction;
            classQMenu;
            classQToolBar;
            classQStatusBar;
            QT_END_NAMESPACE
            classmainwindow:publicQMainWindow
            {
            public:
            mainwindow();
            private:
            voidcreateActions();
            voidcreateMenus();
            voidcreateToolBars();
            voidcreateStatusBar();
            QMenu*MenuFichier;
            QMenu*Classer;
            QMenu*MenuEdition;
            QMenu*MenuAffichage;
            QMenu*MenuApropos;
            QMenu*MenuStatistiques;
            QToolBar*FichierToolBar;
            QToolBar*EditionToolBar;
            QAction*actionnouveau;
            QAction*actionouvrir;
            QAction*actionenregistrer;
            QAction*actiongenerere;
            QAction*actiongenererep;
            QAction*actiongenererem;
            QAction*actiongenerereb;
            QAction*actionquitter;
            QAction*actionactualiser;
            QAction*actioncopier;
            QAction*actioncouper;
            QAction*actioncoller;
            QAction*actionajoutl;
            QAction*actionsupprl;
            QAction*actionajoutp;
            QAction*actionretraitp;
            QAction*actionrechercher;
            QAction*actionannuler;
            QAction*actionretablir;
            QAction*actionclasseraz;
            QAction*actionclassermi;
            QAction*actionclasserms;
            QAction*actionzoomm;
            QAction*actionzoomn;
            QAction*actionstatd;
            QAction*actionstatglob;
            QAction*actionpropos;
            QAction*actionmanuel;
            };
            #endif//MAINWINDOW_H
            Le mainwindow.cpp
            #include<QtGui>
            #include<QApplication>
            #include<QMainWindow>
            #include"mainwindow.h"
            mainwindow::mainwindow()
            {//CréationdesActiondeMenu
            Mainlayout=newQGridLayout;
            setCentralWidget(Mainlayout);
            createActions();
            createMenus();
            createToolBars();
            }
            voidmainwindow::createActions()
            {//DebutMenuFichier
            actionnouveau=newQAction(QIcon(":/images/new.png"),tr("&Nouveau"),this);
            actionnouveau->setShortcut(QKeySequence("Ctrl+N"));
            actionnouveau->setToolTip(tr("Permetdecréerunnouveaufichierdenote"));
            actionouvrir=newQAction(QIcon(":/images/open.png"),tr("&Ourvrir"),this);
            actionouvrir->setShortcut(QKeySequence("Ctrl+O"));
            actionouvrir->setToolTip(tr("Permetd'ouvrirunfichierexistant"));
            actionenregistrer=newQAction(QIcon(":/images/save.png"),tr("&Enrégistrer"),this);
            actionenregistrer->setShortcut(QKeySequence("Ctrl+S"));
            actionenregistrer->setToolTip(tr("Permetd'enregistrerlesmodificationsd'unfichier"));
            actiongenerere=newQAction(QIcon(":/images/fiche.png"),tr("&GénererFcihierCNN-E"),this);
            actiongenerere->setShortcut(QKeySequence("Ctrl+E"));
            actiongenerere->setToolTip(tr("PermetdegenererlefichierCNNdel'Enseignant"));
            actiongenererep=newQAction(QIcon(":/images/fichep.png"),tr("&GénererFcihierCNN-EP"),this);
            actiongenererep->setShortcut(QKeySequence("Ctrl+P"));
            actiongenererep->setToolTip(tr("PermetdegenererlefichierCNNdel'EnseignantPrincipal"));
            actiongenererem=newQAction(QIcon(":/images/fichm.png"),tr("&GénererFcihierCNN-M"),this);
            actiongenererem->setShortcut(QKeySequence("Ctrl+M"));
            actiongenererem->setToolTip(tr("Permetdegenererlefichiermoyennedu1ersemestre"));
            actiongenerereb=newQAction(QIcon(":/images/fichb.png"),tr("&GénererBulletins)"),this);
            actiongenerereb->setShortcut(QKeySequence("Ctrl+B"));
            actiongenerereb->setToolTip(tr("Permetdegenererlesbulletinenformationimprimable"));
            actionquitter=newQAction(QIcon(":/images/quit.png"),tr("&Quitter)"),this);
            actionquitter->setShortcut(QKeySequence("Ctrl+Q"));
            actionquitter->setToolTip(tr("FermerFenêtreetQuitterl'application"));
            connect(actionquitter,SIGNAL(triggered()),qApp,SLOT(closeAllWindows()));
            //FinMenuFichier_DebutMenuEdition
            actionactualiser=newQAction(QIcon(":/images/remove.png"),tr("&Actualiser"),this);
            actionactualiser->setShortcut(QKeySequence("Ctrl+R"));
            actionactualiser->setToolTip(tr("PermetdechangerlamatièreetleCoefduCahier"));
            actioncopier=newQAction(QIcon(":/images/copy.png"),tr("&Copier"),this);
            actioncopier->setShortcut(QKeySequence("Ctrl+C"));
            actioncopier->setToolTip(tr("Permetdecopierl'informationselectionner"));
            actioncouper=newQAction(QIcon(":/images/cut.png"),tr("&Couper"),this);
            actioncouper->setShortcut(QKeySequence("Ctrl+X"));
            actioncouper->setToolTip(tr("Permetdecouperl'informationselectionner"));
            actioncoller=newQAction(QIcon(":/images/past.png"),tr("&Coller"),this);
            actioncoller->setShortcut(QKeySequence("Ctrl+V"));
            actioncoller->setToolTip(tr("Permetdecollerl'informationprecedemmentcopier/couper"));
            actionajoutl=newQAction(QIcon(":/images/addline.png"),tr("&AjouterLigne"),this);
            actionajoutl->setShortcut(QKeySequence("Ctrl+L"));
            actionajoutl->setToolTip(tr("Permetd'ajouteruneligneautableaudeNote"));
            actionsupprl=newQAction(QIcon(":/images/delline.png"),tr("&SupprimerLigne"),this);
            actionsupprl->setShortcut(QKeySequence("Ctrl+K"));
            actionsupprl->setToolTip(tr("PermetdesupprimerunelignedutableaudeNote"));
            actionajoutp=newQAction(QIcon(":/images/add.png"),tr("&AjouterPoint"),this);
            actionajoutp->setShortcut(QKeySequence("Ctrl+J"));
            actionajoutp->setToolTip(tr("Permetd'ajouterdepointal'ensembledelaclassedansuneEvaluation"));
            actionretraitp=newQAction(QIcon(":/images/ad.png"),tr("&RetirerPoint"),this);
            actionretraitp->setShortcut(QKeySequence("Ctrl+I"));
            actionretraitp->setToolTip(tr("Permetdesoustrairedepointal'ensembledelaclassedansuneEvaluation"));
            //Manqued'image
            actionrechercher=newQAction(QIcon(":/images/reche.png"),tr("&Rechercher"),this);
            actionrechercher->setShortcut(QKeySequence("Ctrl+R"));
            actionrechercher->setToolTip(tr("Permetderechercheruneinformationprecise"));
            actionannuler=newQAction(QIcon(":/images/annuler.png"),tr("&Annuler"),this);
            actionannuler->setShortcut(QKeySequence("Ctrl+A"));
            actionannuler->setStatusTip(tr("Permetd'annulerlesdernièresactionseffectuernonenregistrer"));
            actionretablir=newQAction(QIcon(":/images/suivant.png"),tr("&Rétablir"),this);
            actionretablir->setShortcut(QKeySequence("Ctrl+Z"));
            actionretablir->setToolTip(tr("Permetderétablirladernièreactionannulernonenregistrer"));
            actionclasseraz=newQAction(QIcon(":/images/classer.png"),tr("&Classer/OrdreAlphabétique"),this);
            actionclasseraz->setShortcut(QKeySequence("Ctrl+U"));
            actionclasseraz->setToolTip(tr("PermetdeClasserenodrealphabétiquelesnomsdesapprenants"));
            //Manqued'image
            actionclassermi=newQAction(tr("&Classer/MoyenneInterro"),this);
            actionclassermi->setShortcut(QKeySequence("Ctrl+F"));
            actionclassermi->setToolTip(tr("Permettriersuivantl'ordrecroissantlesmoyennesd'interrogationobtenues"));
            actionclasserms=newQAction(tr("&Classer/MoyenneSemestrielle"),this);
            actionclasserms->setShortcut(QKeySequence("Ctrl+G"));
            actionclasserms->setToolTip(tr("Permettriersuivantl'ordrecroissantlesmoyennessemestriellesobtenues"));
            //FinMenuEditionDebutMenuAffichage
            actionzoomm=newQAction(QIcon(":/images/zoomm.png"),tr("&Zoom+"),this);
            actionzoomm->setStatusTip(tr("Permetd'agrandirlatailledescaractères"));
            actionzoomn=newQAction(QIcon(":/images/zoomn.png"),tr("&Zoom-"),this);
            actionzoomn->setStatusTip(tr("Permetderéduirelatailledescaractères"));
            //FinMenuAffichageDebutMenuStatistiques
            actionstatd=newQAction(QIcon(":/images/classerms.png"),tr("&Statitique/Matière"),this);
            actionstatd->setShortcut(QKeySequence("Ctrl+D"));
            actionstatd->setToolTip(tr("Affichelesstatistiquesselonlesmoyennessemestrielle/Matière"));
            actionstatglob=newQAction(tr("&StatitiquesGlobal"),this);
            actionstatglob->setShortcut(QKeySequence("Ctrl+W"));
            actionstatglob->setToolTip(tr("AffichelesstatistiquesselonlesmoyennessemestrielleGénerale"));
            //MenuApropos
            actionpropos=newQAction(tr("&AproposdeCNN"),this);
            actionpropos->setToolTip(tr("Connaîtrel'Applicationetsonauteur"));
            actionmanuel=newQAction(tr("&Manueld'Utilisation"),this);
            actionmanuel->setToolTip(tr("Comprendrel'utilisationdel'application"));
            }
            voidmainwindow::createMenus()
            {
            MenuFichier=menuBar()->addMenu(tr("&Fichier"));
            MenuFichier->addAction(actionnouveau);
            MenuFichier->addAction(actionouvrir);
            MenuFichier->addAction(actionenregistrer);
            MenuFichier->addAction(actiongenerere);
            MenuFichier->addAction(actiongenererep);
            MenuFichier->addAction(actiongenererem);
            MenuFichier->addAction(actiongenerereb);
            MenuFichier->addAction(actionquitter);
            menuBar()->addSeparator();
            MenuEdition=menuBar()->addMenu(tr("&Eddition"));
            MenuEdition->addAction(actionactualiser);
            MenuEdition->addAction(actioncopier);
            MenuEdition->addAction(actioncouper);
            MenuEdition->addAction(actioncoller);
            MenuEdition->addAction(actionajoutl);
            MenuEdition->addAction(actionsupprl);
            MenuEdition->addAction(actionajoutp);
            MenuEdition->addAction(actionretraitp);
            MenuEdition->addAction(actionannuler);
            MenuEdition->addAction(actionretablir);
            MenuEdition->addAction(actionrechercher);
            QMenu*menuClasser=newQMenu("Classer/");
            menuClasser->addAction(actionclasseraz);
            menuClasser->addAction(actionclassermi);
            menuClasser->addAction(actionclasserms);
            MenuEdition->addAction(actionzoomm);
            MenuEdition->addAction(actionzoomn);
            menuBar()->addSeparator();
            MenuStatistiques=menuBar()->addMenu(tr("&Statistiques"));
            MenuStatistiques->addAction(actionstatd);
            MenuStatistiques->addAction(actionstatglob);
            menuBar()->addSeparator();
            MenuApropos=menuBar()->addMenu(tr("&Apropos"));
            MenuApropos->addAction(actionpropos);
            MenuApropos->addAction(actionmanuel);
            }
            voidmainwindow::createToolBars()
            {
            QToolBar*toolBar=newQToolBar("Edition",this);
            addToolBar(Qt::TopToolBarArea,toolBar);
            EditionToolBar->addAction(actionactualiser);
            EditionToolBar->addAction(actioncopier);
            EditionToolBar->addAction(actioncouper);
            EditionToolBar->addAction(actioncoller);
            EditionToolBar->addAction(actionajoutl);
            EditionToolBar->addAction(actionsupprl);
            EditionToolBar->addAction(actionajoutp);
            EditionToolBar->addAction(actionretraitp);
            EditionToolBar->addAction(actionrechercher);
            EditionToolBar->addAction(actionannuler);
            EditionToolBar->addAction(actionretablir);
            EditionToolBar->addAction(actionclasseraz);
            EditionToolBar->addAction(actionclassermi);
            EditionToolBar->addAction(actionclasserms);
            EditionToolBar->addAction(actionzoomm);
            EditionToolBar->addAction(actionzoomn);
            QToolBar*toolbar=newQToolBar("Fichier",this);
            addToolBar(Qt::LeftToolBarArea,toolBar);
            FichierToolBar->addAction(actionnouveau);
            FichierToolBar->addAction(actionouvrir);
            FichierToolBar->addAction(actionenregistrer);
            FichierToolBar->addAction(actiongenerere);
            FichierToolBar->addAction(actiongenererep);
            FichierToolBar->addAction(actiongenererem);
            FichierToolBar->addAction(actiongenerereb);
            FichierToolBar->addAction(actionstatd);
            FichierToolBar->addAction(actionstatglob);
            FichierToolBar->addAction(actionquitter);
            }
            voidmainwindow::createStatusBar()
            {
            }
            Le main.cpp
            #include<QApplication>
            #include"mainwindow.h"
            intmain(intargc,char*argv[])
            {
            QApplicationapp(argc,argv);
            Q_INIT_RESOURCE(cnn);
            app.setApplicationName("..........");
            mainwindowmainWin;
            mainWin.show();
            returnapp.exec();
            }
             

            Merci d'avance

            -
            Edité par FabriceNafab 10 février 2019 à 12:41:46

            • Partager sur Facebook
            • Partager sur Twitter

            Rendez vous là où il n'y a pas de chemin et laisser vos traces....

              10 février 2019 à 15:56:38

              Alors, une première remarque en passant:

              Le code que tu écris (surtout si tu le place sur un forum) sera sans doute beaucoup plus souvent lu qu'il ne sera compilé.

              Le compilateur, lui, il se contente parfaitement d'un code où toutes les lignes commencent à la colonne 1, mais, le pauvre malheureux qui doit le lire, lui, il aimerait très fort pouvoir "grouper" les différents éléments du code.

              Tu dois donc prendre l'habitude de "formater" ton code de manière à ce que les différentes parties apparaissent clairement.  Il y a quantité de mises en formes possibles, et, comme elles se valent à peu près toutes, il ne m'appartient pas de te forcer à en utiliser une plutôt qu'une autre.

              Une autre règle à laquelle tu dois t'astreindre, bien qu'elle n'ait aucune espèce d'influence sur le compilateur, c'est  de décider une bonne fois pour toute de la forme que tu donnes au nom de tes données (membre de classes et locales), de tes fonctions et de tes classes.

              Le nom et la forme que tu utilises pour écrire le nom de quelque chose est sensé représenter l'usage qui sera fait de la chose nommée.  Si tu peux te dire, sans même avoir à réfléchir, que  "telle chose" représente une donnée membre de ta classe et que "telle autre" représente une donnée locale, alors que "telle encore autre" représente un type de donnée, tu te facilitera énormément la vie par la suite ;)

              Mais, une fois que tu auras trouvé celle qui te convient, il sera important de l'appliquer pour l'intégralité de ton projet.  Voici la copie adaptée (selon une des mises en formes souvent utilisée) de ton code:

              le fichier .pro

              QT+=widgets
               
              SOURCES+=\
                  main.cpp\
                  MainWindow.cpp
              HEADERS+=\
                  MainWindow.h
              RESOURCES+=\
                  cnn.qrc

              le fichier mainwindow.h

              /* NOTA : dans un fichier d'en-tête, le seul fichier
               * d'ent-tête dont tu as réellement besoin est celui qui
               * contient la classe de base
               * tout le reste peut être fourni sous la forme de déclaration
               * anticipée
               */
              #ifndef MAINWINDOW_H
              #define MAINWINDOW_H
              #include<QMainWindow>
              /* NOTE QT_BEGIN_NAMESPACE n'est absolument pas nécessaire */
              classQAction;
              classQMenu;
              classQToolBar;
              classQStatusBar;
              
              classmainwindow:public QMainWindow
              {
              public:
                  mainwindow();
                  /* à ajouter */
                  virtual ~mainwindow() = default;
              private:
                  voidcreateActions();
                  voidcreateMenus();
                  voidcreateToolBars();
                  voidcreateStatusBar();
              /* NOTA: Aérer un tout petit peu ton code ne fait pas de mal
               * Laisser une ou deux lignes vides entre les fonctions privées
               * et les données membres de la classe rend les choses 
               * "plus faciles à lire"
               * De même que le fait de séparer les données de types différents
               */
                  QMenu * MenuFichier;
                  QMenu * Classer;
                  QMenu * MenuEdition;
                  QMenu * MenuAffichage;
                  QMenu * MenuApropos;
                  QMenu * MenuStatistiques;
              
                  QToolBar * FichierToolBar;
                  QToolBar * EditionToolBar;
                  QAction * actionnouveau;
                  QAction * actionouvrir;
                  QAction * actionenregistrer;
                  QAction * actiongenerere;
                  QAction * actiongenererep;
                  QAction * actiongenererem;
                  QAction * actiongenerereb;
                  QAction * actionquitter;
                  QAction * actionactualiser;
                  QAction * actioncopier;
                  QAction * actioncouper;
                  QAction * actioncoller;
                  QAction * actionajoutl;
                  QAction * actionsupprl;
                  QAction * actionajoutp;
                  QAction * actionretraitp;
                  QAction * actionrechercher;
                  QAction * actionannuler;
                  QAction * actionretablir;
                  QAction * actionclasseraz;
                  QAction * actionclassermi;
                  QAction * actionclasserms;
                  QAction * actionzoomm;
                  QAction * actionzoomn;
                  QAction * actionstatd;
                  QAction * actionstatglob;
                  QAction * actionpropos;
                  QAction * actionmanuel;
              };
              #endif//MAINWINDOW_H

              Au passage : C'est une excellente chose que d'utiliser des fonctions bien spécifiques pour créer les différentes parties dont tu as besoin.  Cela permet  de rendre les choses "plus homogènes".

              Par contre, je ne suis absolument pas certain que tu aies besoin des QMenu et des QToolbar pour ce faire...

              Enfin, ca, ce n'est qu'un détail ;)

              Le fichier mainwindow.cpp

              /* Nota : il ne faut inclure un fichier d'en-tête que lorsque
               * tu as réellement besoin de connaître la classe qu'il déclare :
               * lorsque tu veux créer une instance de la classe (éventuellement 
               * au travers de new s'il s'agit d'un pointeur)
               * ou lorsque tu veux pouvoir faire appel à ses propres
               * fonctions membres
               */
              #include <mainwindow.h>  
              #include <QMenu>
              #include <QAction>
              #include <QToolbar>
              mainwindow::mainwindow()
              {//CréationdesActiondeMenu
                  Mainlayout= new QGridLayout;
                  setCentralWidget(Mainlayout);
                  createActions();
                  createMenus();
                  createToolBars();
              }
              voidmainwindow::createActions()
              {
                  actionnouveau = new QAction(QIcon(":/images/new.png"),tr("&Nouveau"),this);
                  actionnouveau->setShortcut(QKeySequence("Ctrl+N"));
                  actionnouveau->setToolTip(tr("Permet de créer un nouveau fichier de note"));
              
                  actionouvrir = new QAction( QIcon(":/images/open.png"), tr( "&Ourvrir" ), this);
                  actionouvrir->setShortcut( QKeySequence("Ctrl+O") );
                  actionouvrir->setToolTip( tr("Permet d'ouvrir un fichier existant"));
              
                  actionenregistrer= new QAction(QIcon(":/images/save.png"),tr("&Enrégistrer"),this);
                  actionenregistrer->setShortcut( QKeySequence("Ctrl+S") );
                  actionenregistrer->setToolTip(tr("Permetd'enregistrerlesmodificationsd'unfichier"));
              
                  actiongenerere= new QAction( QIcon(":/images/fiche.png"), tr("&GénererFcihierCNN-E"), this);
                  actiongenerere->setShortcut( QKeySequence("Ctrl+E") );
                  actiongenerere->setToolTip( tr("PermetdegenererlefichierCNNdel'Enseignant") );
                  actiongenererep=newQAction( QIcon(":/images/fichep.png"), tr("&GénererFcihierCNN-EP"), this);
                  actiongenererep->setShortcut( QKeySequence("Ctrl+P") );
                  actiongenererep->setToolTip( tr("Permet de generer le fichier CNN de l'EnseignantPrincipal") );
              
                  actiongenererem= new QAction( QIcon(":/images/fichm.png"), tr("&GénererFcihierCNN-M"), this);
                  actiongenererem->setShortcut( QKeySequence("Ctrl+M") );
                  actiongenererem->setToolTip( tr("Permet de generer le fichier moyenne du 1 ersemestre") );
              
                  actiongenerereb = new QAction (QIcon(":/images/fichb.png"), tr("&GénererBulletins)"), this);
                  actiongenerereb->setShortcut( QKeySequence("Ctrl+B") );
                  actiongenerereb->setToolTip(tr("Permet de generer les bulletin en version imprimable"));
              
                  actionquitter= new QAction( QIcon(":/images/quit.png"), tr("&Quitter)"), this);
                  actionquitter->setShortcut( QKeySequence("Ctrl+Q") );
                  actionquitter->setToolTip( tr("Fermer Fenêtre et Quitter l'application") );
              
                  connect(actionquitter,SIGNAL(triggered()),qApp,SLOT(closeAllWindows()));
              //FinMenuFichier_DebutMenuEdition
              
                  actionactualiser = new QAction( QIcon(":/images/remove.png"), tr("&Actualiser"), this);
                  actionactualiser->setShortcut( QKeySequence("Ctrl+R") );
                  actionactualiser->setToolTip(tr("Permet de changer la matière et le Coef du Cahier"));
              
                  actioncopier = new QAction(QIcon(":/images/copy.png"), tr("&Copier"), this);
                  actioncopier->setShortcut( QKeySequence("Ctrl+C") );
                  actioncopier->setToolTip(tr("Permet de copier l'information selectionnée"));
              
                  actioncouper = new QAction(QIcon(":/images/cut.png"), tr("&Couper"), this);
                  actioncouper->setShortcut( QKeySequence("Ctrl+X") );
                  actioncouper->setToolTip(tr("Permet de couper l'information selectionnée"));
              
                  actioncoller = new QAction(QIcon(":/images/past.png"), tr("&Coller"), this);
                  actioncoller->setShortcut( QKeySequence("Ctrl+V") );
                  actioncoller->setToolTip(tr("Permet de coller l'information precedemment copiée/coupée"));
              
                  actionajoutl = new QAction(QIcon(":/images/addline.png"), tr("&AjouterLigne"), this);
                  actionajoutl->setShortcut( QKeySequence("Ctrl+L") );
                  actionajoutl->setToolTip( tr("Permet d'ajouter une ligne au tableau de Note") );
              
                  actionsupprl=newQAction(QIcon(":/images/delline.png"), tr("&SupprimerLigne"), this);
                  actionsupprl->setShortcut (QKeySequence("Ctrl+K") );
                  actionsupprl->setToolTip( tr("Permet de supprimer une ligne du tableau de Note") );
              
                  actionajoutp=newQAction(QIcon(":/images/add.png"), tr("&AjouterPoint"), this);
                  actionajoutp->setShortcut( QKeySequence("Ctrl+J") );
                  actionajoutp->setToolTip(tr("Permet d'ajouter des points a l'ensemble de la classe dans une Evaluation") );
              
                  actionretraitp= new QAction(QIcon(":/images/ad.png"), tr("&RetirerPoint"), this);
                  actionretraitp->setShortcut( QKeySequence("Ctrl+I") );
                  actionretraitp->setToolTip(tr("Permet de soustraire des points a l'ensemble de la classe dans une Evaluation"));
              
              //Manqued'image
                  actionrechercher = new QAction(QIcon(":/images/reche.png"), tr("&Rechercher"), this);
                  actionrechercher->setShortcut( QKeySequence("Ctrl+R") );
                  actionrechercher->setToolTip( tr("Permet de rechercher une information precise"));
              
                  actionannuler= new QAction( QIcon(":/images/annuler.png"), tr("&Annuler"), this);
                  actionannuler->setShortcut( QKeySequence("Ctrl+A") );
                  actionannuler->setStatusTip( tr("Permet d'annuler les dernières actions effectuées non enregistrées"));
              
                  actionretablir= new QAction( QIcon(":/images/suivant.png"), tr("&Rétablir"), this);
                  actionretablir->setShortcut( QKeySequence("Ctrl+Z") );
                  actionretablir->setToolTip(tr("Permet de rétablir la dernière action annulée non enregistrée") );
              
                  actionclasseraz = new QAction( QIcon(":/images/classer.png"), tr("&Classer/Ordre Alphabétique"), this);
                  actionclasseraz->setShortcut( QKeySequence("Ctrl+U") );
                  actionclasseraz->setToolTip( tr("Permet de Classer par ordre alphabétique les noms des apprenants") );
              //Manqued'image
                  actionclassermi= new QAction( tr("&Classer/Moyenne Interro"), this);
                  actionclassermi->setShortcut( QKeySequence("Ctrl+F") );
                  actionclassermi->setToolTip(tr("Permet de trier suivant l'ordre croissant des moyennes d'interrogation obtenues") );
              
                  actionclasserms= new QAction( tr("&Classer/Moyenne Semestrielle"), this);
                  actionclasserms->setShortcut( QKeySequence("Ctrl+G") );
                  actionclasserms->setToolTip(tr("Permet de trier suivant l'ordre croissant les moyennes semestrielles obtenues") );
              
              //FinMenuEditionDebutMenuAffichage
                  actionzoomm= new QAction( QIcon(":/images/zoomm.png"), tr("&Zoom+"), this);
                  actionzoomm->setStatusTip(tr("Permet d'agrandir la taille des caractères"));
              
                  actionzoomn= new QAction( QIcon(":/images/zoomn.png"), tr("&Zoom-"), this);
                  actionzoomn->setStatusTip(tr("Permet de réduire la taille des caractères"));
              //FinMenuAffichageDebutMenuStatistiques
                  actionstatd= new QAction( QIcon(":/images/classerms.png"), tr("&Statitique/Matière"), this);
                  actionstatd->setShortcut( QKeySequence("Ctrl+D") );
                  actionstatd->setToolTip( tr("Affiche les statistiques selon les moyennes semestrielles/Matière") );
              
                  actionstatglob= new QAction( tr("&Statitiques Global"), this);
                  actionstatglob->setShortcut( QKeySequence("Ctrl+W") );
                  actionstatglob->setToolTip(tr("Affiche les statistiques selon les moyennes semestrielle Génerale"));
              //MenuApropos
                  actionpropos= new QAction( tr("&Aproposde CNN"), this);
                  actionpropos->setToolTip( tr("Connaître l'Application et sonauteur"));
              
                  actionmanuel = new QAction(tr("&Manuel d'Utilisation"),this);
                  actionmanuel->setToolTip( tr("Comprendre l'utilisation de l'application") );
              }
              voidmainwindow::createMenus()
              {
                  MenuFichier=menuBar()->addMenu(tr("&Fichier"));
                  MenuFichier->addAction(actionnouveau);
                  MenuFichier->addAction(actionouvrir);
                  MenuFichier->addAction(actionenregistrer);
                  MenuFichier->addAction(actiongenerere);
                  MenuFichier->addAction(actiongenererep);
                  MenuFichier->addAction(actiongenererem);
                  MenuFichier->addAction(actiongenerereb);
                  MenuFichier->addAction(actionquitter);
                  menuBar()->addSeparator();
              
                  MenuEdition=menuBar()->addMenu(tr("&Eddition"));
                  MenuEdition->addAction(actionactualiser);
                  MenuEdition->addAction(actioncopier);
                  MenuEdition->addAction(actioncouper);
                  MenuEdition->addAction(actioncoller);
                  MenuEdition->addAction(actionajoutl);
                  MenuEdition->addAction(actionsupprl);
                  MenuEdition->addAction(actionajoutp);
                  MenuEdition->addAction(actionretraitp);
                  MenuEdition->addAction(actionannuler);
                  MenuEdition->addAction(actionretablir);
                  MenuEdition->addAction(actionrechercher);
              
                  QMenu*menuClasser= new QMenu("Classer/");
                  menuClasser->addAction(actionclasseraz);
                  menuClasser->addAction(actionclassermi);
                  menuClasser->addAction(actionclasserms);
                  MenuEdition->addAction(actionzoomm);
                  MenuEdition->addAction(actionzoomn);
                  menuBar()->addSeparator();
              
                  MenuStatistiques=menuBar()->addMenu(tr("&Statistiques"));
                  MenuStatistiques->addAction(actionstatd);
                  MenuStatistiques->addAction(actionstatglob);
                  menuBar()->addSeparator();
              
                  MenuApropos=menuBar()->addMenu(tr("&Apropos"));
                  MenuApropos->addAction(actionpropos);
                  MenuApropos->addAction(actionmanuel);
              }
              voidmainwindow::createToolBars()
              {
                  QToolBar * toolBar = new QToolBar("Edition",this);
                  addToolBar(Qt::TopToolBarArea,toolBar);
                  EditionToolBar->addAction(actionactualiser);
                  EditionToolBar->addAction(actioncopier);
                  EditionToolBar->addAction(actioncouper);
                  EditionToolBar->addAction(actioncoller);
                  EditionToolBar->addAction(actionajoutl);
                  EditionToolBar->addAction(actionsupprl);
                  EditionToolBar->addAction(actionajoutp);
                  EditionToolBar->addAction(actionretraitp);
                  EditionToolBar->addAction(actionrechercher);
                  EditionToolBar->addAction(actionannuler);
                  EditionToolBar->addAction(actionretablir);
                  EditionToolBar->addAction(actionclasseraz);
                  EditionToolBar->addAction(actionclassermi);
                  EditionToolBar->addAction(actionclasserms);
                  EditionToolBar->addAction(actionzoomm);
                  EditionToolBar->addAction(actionzoomn);
              
                  QToolBar * toolbar = newQToolBar("Fichier",this);
                  addToolBar(Qt::LeftToolBarArea,toolBar);
                  FichierToolBar->addAction(actionnouveau);
                  FichierToolBar->addAction(actionouvrir);
                  FichierToolBar->addAction(actionenregistrer);
                  FichierToolBar->addAction(actiongenerere);
                  FichierToolBar->addAction(actiongenererep);
                  FichierToolBar->addAction(actiongenererem);
                  FichierToolBar->addAction(actiongenerereb);
                  FichierToolBar->addAction(actionstatd);
                  FichierToolBar->addAction(actionstatglob);
                  FichierToolBar->addAction(actionquitter);
              }
              voidmainwindow::createStatusBar()
              {
              }

              NOTA: je n'ai rien corrigé dans le code (à part quelques fautes d'orthographe qui m'arrachaient les yeux)

              Avoue que c'est tout de suite beaucoup plus facile à lire, non ???

              Sauf que, à vue d'oeil, ce code ne devrait déjà pas compiler :P  Ne serait-ce queparce que tu déclares deux fois la variable locale toolbar dans la même portée de la fonction createToolbar :p

              Entuite, tu crée une QToolbar nommée ...toolbar, mais tu essaye de remplir une QToolbar nommée ...editionToolbar (et une autre nommée FichierToolbar), qui ont été déclarées, mais non créées.

              Et tu t'étonnes que l'application ne soit pas d'accord ?

              • Partager sur Facebook
              • Partager sur Twitter
              Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                10 février 2019 à 17:56:55

                Je vais de suite remettre de l'ordre dans tout ça...

                Non, Je ne m'étonne pas vraiment. Rien qu'à évaluer moi même mon niveau. Je suis plus ou moins quelques cours et je prends  un exemple de ce qu'ils font dans le cours pour l'adapter à mon projet. "Erreur Monumentale, on dirait"

                koala01 a écrit:

                Sauf que, à vue d'oeil, ce code ne devrait déjà pas compiler :P  Ne serait-ce queparce que tu déclares deux fois la variable locale toolbar dans la même portée de la fonction createToolbar :p

                Entuite, tu crée une QToolbar nommée ...toolbar, mais tu essaye de remplir une QToolbar nommée ...editionToolbar (et une autre nommée FichierToolbar), qui ont été déclarées, mais non créées.

                Et tu t'étonnes que l'application ne soit pas d'accord ?

                A la place de la variable locale toolbar créé deux fois inutilement, je voulais mettre Fichiertoolbar et Editiontoolbar et les remplir par la suite avec les actions déjà créés.

                ce sera : 

                void mainwindow::createToolBars()
                {
                
                    QToolBar *EditiontoolBar = new QToolBar("Edition", this);
                    addToolBar(Qt::TopToolBarArea, EditiontoolBar);
                
                
                  QToolBar *FichiertoolBar = new QToolBar("Fichier", this);
                    addToolBar(Qt::LeftToolBarArea, FichiertoolBar);
                
                }

                Le code est il correcte ?

                Je vais régler les autres erreurs à corriger puis je te tiens informer..

                Sincère Merci Koala01...



                • Partager sur Facebook
                • Partager sur Twitter

                Rendez vous là où il n'y a pas de chemin et laisser vos traces....

                  10 février 2019 à 20:58:18

                  FabriceNafab a écrit:


                  ce sera : 

                  void mainwindow::createToolBars()
                  {
                  
                      QToolBar *EditiontoolBar = new QToolBar("Edition", this);
                      addToolBar(Qt::TopToolBarArea, EditiontoolBar);
                  
                  
                    QToolBar *FichiertoolBar = new QToolBar("Fichier", this);
                      addToolBar(Qt::LeftToolBarArea, FichiertoolBar);
                  
                  }

                  Le code est il correcte ?

                  Je vais régler les autres erreurs à corriger puis je te tiens informer..

                  Sincère Merci Koala01...

                  Pas d'avantage, car, là, tu vas créer deux variables locales (à la fonction createToolBars() ) qui portera le même nom que tes données membres (EditiontoolBar et FichiertoolBar )  :P.

                  Ce sera autorisé par le langage, mais cela foutra la merde dans ton programme, parce que, une fois que la fonction aura été quittée, les variables locales (celles qui sont définies) seront oubliées et seules resteront ... les données membres (celles qui ne sont pas définies).

                  Ce que tu dois faire, c'est travailler de la même manière (mais en adaptant le code bien sur) que celle dont tu crées les différentes actions ;)

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                    11 février 2019 à 0:38:49

                    D'accord Koala01....

                    Mais si je dois proccéder comme pour la façon dont j'ai créé les actions. Alors je crée un new QtoolBar pour chaque élément que je désire avoir sur ma barre d'outil.

                    Exacte ?

                    Un peu comme : Pour Nouveau

                     QtoolBar *Nouveau = new QtoolBar("New");
                     addToolBar(Qt::TopToolBarArea, Nouveau);

                    Si oui, comment je vais relier les divers actions à chaque QtoolBar dans ce cas ci ? 

                    Aussi l'orientation du toolbar sera définis a chaque fois ?

                    Toujours Merci pour ton aide...

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Rendez vous là où il n'y a pas de chemin et laisser vos traces....

                      11 février 2019 à 8:01:03

                      non, tu fais de la même manière que pour tes QAction:

                      EditionToolbar = new QToolBar(Edition);
                      addToolbar(EditionToolbar);
                      EditionToolbar->addAction(/* ... */);
                      /* ... */
                      FichierToolbar = new QToolBar("Fichiers");
                      addToolbar(FichierToolbar);
                      FichierToolbar->addAction(/* ... */);
                      /* ... */

                      De manière générale, tous les widgets seront créés selon le même principes:

                      1. Tu crées ton widget avec new
                      2. Tu modifies les valeurs qui t'intéressent
                      3. tu l'ajoute au widget parent.
                      4. tu ajoutes à ton nouveau widgets les widgets qu'il doit contenir

                      -
                      Edité par koala01 11 février 2019 à 8:04:23

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                        11 février 2019 à 11:11:22

                        Merci pour la disponibilité..

                        Voilà j'ai corrigé le code et tout va presque bien. 

                        koala01 a écrit:

                        Ceci étant dit:

                        Ton impression écran (au niveau de mainwindow.h) nous indique déjà que le compilateur se plaint qu'il n'y a aucun destructeur virtuel pour ta classe mainwindow.  Tu devrais déjà commencer par corriger ce point, en le déclarant sous la forme de

                        virtual ~mainwindo();

                        dans le fichier mainwindow.h et en le définissant sous a forme de

                        mainwindow::~mainwindow(){
                        
                        }

                        dans le fichier mainwindow.cpp.

                        Il y a peu de chance pour que cela suffise à corriger ton problème.  Mais disons qu'il est toujours particulièrement intéressant de veiller à corriger les avertissements émis par le compilateur.

                        J'ai respecté ces consignes et je reçoit des notifications d'erreur 

                        Voilà l'extrait Mainwindow.h

                        class mainwindow : public QMainWindow
                        {
                            public:
                            mainwindow();
                            virtual ~mainwindow() = default;
                        

                        Notification 1 "Defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 (Enabled by Default)

                        Notification 2 "virtual~mainwindow()=default; Explicity defaulted here

                        Notification 3  "Warning : "defaulted function definitions are a C++11 Extension"

                        Voilà l'extrait Mainwindow.cpp

                        mainwindow::mainwindow()
                        { //Création des Action de Menu
                            createActions();
                            createMenus();
                            createToolBars();
                        }
                        mainwindow::~mainwindow()
                        {
                        
                        }

                        Notification 1 : "definition of defaulted explicity"

                        A quel problème je suis confronté là ?

                        J'ai mis les notifications telles quelles afin de comprendre ces problèmes une fois. C'est rare de trouver des personnes disposé a aider quand ont est débutant et qu'on pose des question ahurissantes.

                        Quel solution je peut préconiser ?

                        Merci et Bon début de semaine....

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Rendez vous là où il n'y a pas de chemin et laisser vos traces....

                          11 février 2019 à 11:15:58

                          Le "= default" est une fonctionnalité du C++11. Il te faut l'activer pour pourvoir en profiter en ajoutant ça dans ton fichier .pro :

                          CONFIG += c++11

                          Je ne sais pas avec quelle version de Qt et quel compilateur tu travailles mais cela devrait être activé par défaut depuis le temps.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 février 2019 à 0:05:46

                            C'est réglé..

                            Pour le destructeur dans le Mainwindow.cpp 

                            mainwindow::~mainwindow()
                            {
                             
                            }

                            Je peux lui faire quoi pour faire partir la notification ?

                            Merci 

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Rendez vous là où il n'y a pas de chemin et laisser vos traces....

                            Programme subitement arrêté...

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown