Partage
  • Partager sur Facebook
  • Partager sur Twitter

QT: crash du programme

Interface Homme Graphique

Sujet résolu
    14 mai 2019 à 14:52:14

    Bonjour, j'ai besoin de votre aide, c'est dans l'urgence.

    Je travaille sur un exercice sur QT et je n'arrive pas à comprendre pour qu'elles raisons mon programme s'arrête subitement.

    Pour information je suis sur MacBook Pro OS High Sierra v10.13.16 et j'utilise Virtual Box pour travailler sur Ubuntu avec QT Creator.

    Pourquoi pas sur Mac OS? Car cela demande XCode donc dernier OS et donc mise à jour et adaptation de mon bureau demandé

    Je vous envoie mes classes:

    finddialog.h

    #ifndef FINDDIALOG_H
    #define FINDDIALOG_H
    
    #include <qglobal.h>
    #if QT_VERSION >= 0x050100
    #include <QtWidgets> /* tous les widgets de Qt5 */
    #include <QLabel>
    #include <QLineEdit>
    #include <QCheckBox>   /* 3 checkBox */
    #include <QPushButton> /* 2 buttons */
    #else
    #include <QtGui> /* tous les widgets de Qt4 */
    #endif
    
    class FindDialog : public QDialog 
    {
        Q_OBJECT
    
        private:
            // les widgets
    
        public:
            FindDialog(QWidget *parent = nullptr);
            ~FindDialog();
    
            QHBoxLayout *MainLayout;
            QVBoxLayout *VBigBox1;
            QVBoxLayout *VBigBox2;
            QHBoxLayout *HLittleBox;
    
            QLabel *Label;
            QLineEdit *LineEdit;
            QCheckBox *CheckBox1;
            QCheckBox *CheckBox2;
            QCheckBox *CheckBox3;
            QPushButton *PushButton1;
            QPushButton *PushButton2;
    
        signals:
            void validerBouton();
            void clicRechercher();
        private slots:
            //void rechercherPrecedent("texte", cs);
            //void rechercherSuivant("texte", cs);
    
    };
    
    #endif

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <qglobal.h>
    #if QT_VERSION >= 0x050100
    #include <QtWidgets> /* tous les widgets de Qt5 */
    #else
    #include <QtGui> /* tous les widgets de Qt4 */
    #endif
    
    QT_BEGIN_NAMESPACE
    class QTextEdit;
    QT_END_NAMESPACE
    
    // QTextEdit est une vue, QTextDocument le modèle (un QTextEdit est attaché à un QTextDocument).
    
    //! [0]
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
    
    public slots:
        void about();
        void newFile();
        void openFile(const QString &path = QString());
    
        void rechercher();
    
    
    private:
        void setupFind(); // définition à compléter
        void setupEditor();
        void setupFileMenu();
        void setupHelpMenu();
        void setupEditMenu(); // définition à compléter
    
        QTextEdit *editor;
        QTextCursor cursor;
    };
    //! [0]
    
    #endif
    

    finddialog.cpp

    #include "finddialog.h"
    
    FindDialog::FindDialog(QWidget *parent)
     : QDialog(parent)
    {
        // ...
        
        setWindowTitle(tr("Rechercher..."));
       // setFixedHeight(sizeHint().height());
    
    
        MainLayout = new QHBoxLayout;
        VBigBox1 = new QVBoxLayout;
        VBigBox2 = new QVBoxLayout;
        HLittleBox = new QHBoxLayout;
    
        MainLayout->addLayout(VBigBox1);
        MainLayout->addLayout(VBigBox2);
    
    //partie VBigBox1
        VBigBox1->addLayout(HLittleBox);
    
        VBigBox1->addWidget(CheckBox1);
        VBigBox1->addWidget(CheckBox2);
        VBigBox1->addWidget(CheckBox3);
    
        //partie HLittleBox
        HLittleBox->addWidget(Label);
        HLittleBox->addWidget(LineEdit);
        //Fin partie HLittleBox
    
    // Fin partie BigBox1
    
    
    // partie VBigBox2
        VBigBox2->addWidget(PushButton1);
        VBigBox2->addWidget(PushButton2);
    // Find partie VBigBox2
    
    setLayout(MainLayout);
    
    
    
    
    }
    
    FindDialog::~FindDialog() 
    {
    
    }

    main.cpp

    #include <QApplication>
    
    #include "mainwindow.h"
    #include "finddialog.h"
    
    int main(int argc, char *argv[]) 
    {
        QApplication app(argc, argv);
    
        //MainWindow window;
        //window.resize(640, 512);
        //window.show();
    
        FindDialog dialog;
        dialog.show();
    
    
        return app.exec();
    }


    mainwindow.cpp

    #include "mainwindow.h"
    #include "finddialog.h"
    
    //! [0]
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
        setupFileMenu();
        setupEditMenu(); // définition à compléter
        setupHelpMenu();
        setupFind(); // définition à compléter
        setupEditor();
    
        setCentralWidget(editor);
        setWindowTitle(QString::fromUtf8("Éditeur"));
    }
    //! [0]
    
    void MainWindow::about()
    {
        QMessageBox::about(this, QString::fromUtf8("À propos d'Éditeur"), QString::fromUtf8("<p><b>Éditeur</b><br/>...</p>"));
    }
    
    void MainWindow::newFile()
    {
        editor->clear();
    }
    
    void MainWindow::openFile(const QString &path)
    {
        QString fileName = path;
    
        if (fileName.isNull())
            fileName = QFileDialog::getOpenFileName(this, tr("Ouvrir le fichier"), "", tr("Fichiers C++ (*.cpp *.h)"));
    
        if (!fileName.isEmpty()) 
        {
            QFile file(fileName);
            if (file.open(QFile::ReadOnly | QFile::Text))
                editor->setPlainText(file.readAll());
        }
    }
    
    // Définition à compléter
    void MainWindow::setupFind()
    {
       //TODO
       // instancier findDialog : la boite de dialogue "Rechercher ..."
       
       
       // connecter l'ensemble signal/slot
       
    }
    
    //! [1]
    void MainWindow::setupEditor()
    {
        QFont font;
        font.setFamily("Courier");
        font.setFixedPitch(true);
        font.setPointSize(10);
    
        editor = new QTextEdit;
        editor->setFont(font);    
    
        //editor->ensureCursorVisible();
    
        // chargement d'un fichier par défaut
        QFile file("traceroute.txt");
        if (file.open(QFile::ReadOnly | QFile::Text))
            editor->setPlainText(file.readAll());
    }
    //! [1]
    
    void MainWindow::setupFileMenu()
    {
        QMenu *fileMenu = new QMenu(tr("&Fichier"), this);
        menuBar()->addMenu(fileMenu);
    
        fileMenu->addAction(tr("&Nouveau"), this, SLOT(newFile()),
                            QKeySequence::New);
    
        fileMenu->addAction(tr("&Ouvrir..."), this, SLOT(openFile()),
                            QKeySequence::Open);
                            
        fileMenu->addAction(tr("&Quitter"), qApp, SLOT(quit()),
                            QKeySequence::Quit);
    }
    
    void MainWindow::setupHelpMenu()
    {
        QMenu *helpMenu = new QMenu(tr("&Aide"), this);
        menuBar()->addMenu(helpMenu);
    
        helpMenu->addAction(QString::fromUtf8("À propos d'Éditeur"), this, SLOT(about()));
        helpMenu->addAction(QString::fromUtf8("À propos de Qt"), qApp, SLOT(aboutQt()));
    }
    
    // Définition à compléter
    void MainWindow::setupEditMenu()
    {
        //TODO
        // créer le menu "Édition"
    
    
        // créer une nouvelle action avec le texte "Rechercher" et un raccourci clavier "Ctrl+F". Le signal triggered() de l'action est connecté au slot membre rechercher. Cette fonction ajoute l'action nouvellement créée à la liste des actions du menu "Édition" de l'application
        
    }
    
    void MainWindow::rechercher()
    {
       // à décommenter lorsque la boîte de dialogue Rechercher sera instanciée :
       //findDialog->show();
       //findDialog->raise();
       //findDialog->activateWindow();
    }








    -
    Edité par MathiasRando 14 mai 2019 à 14:58:14

    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2019 à 15:02:48

      Lu´

      C’est quoi l’erreur renvoyée par le compilo ?

      -
      Edité par MoPingouin 14 mai 2019 à 15:03:39

      • Partager sur Facebook
      • Partager sur Twitter
        14 mai 2019 à 15:10:29

        le programme s'est arrêté subitement

        • Partager sur Facebook
        • Partager sur Twitter
          14 mai 2019 à 16:58:06

          Si tu le run en debug (le run avec scarabée) tu auras l'endroit qui a crashé. ;)
          • Partager sur Facebook
          • Partager sur Twitter
            14 mai 2019 à 17:27:56

            Lu'

            Ajouté à ce qu'à dit Maluna34, lorsque ça crash, tu dois avoir un return -quelquechose 

            • Partager sur Facebook
            • Partager sur Twitter
              14 mai 2019 à 17:33:33

              tout se que j'arrive à comprendre en debug mode c'est que c'est une erreur de segmentation
              • Partager sur Facebook
              • Partager sur Twitter
                14 mai 2019 à 18:25:10

                Lu'

                Sans l'erreur, c'est compliquer d'aider, il nous faut juste le contenu de la console de déboggage de Xcode.

                Après si il s'agit d'une erreur de segmentation, c'est sans doute un problème de pointeur.

                • Partager sur Facebook
                • Partager sur Twitter
                  14 mai 2019 à 19:05:07

                  Et bien il te donne la ligne. A droite tu as la pile d'appel. Si tu la remontes tu vas trouver dans ton code la ligne qui fait crasher. ;)

                  -
                  Edité par Maluna34 14 mai 2019 à 19:06:00

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 mai 2019 à 19:14:55

                    En regardant les lignes, je ne comprend pas pourquoi les deux dernières lignes posent problèmes
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 mai 2019 à 19:24:26

                      Et bien nous on te dira, mais faut que tu nous la donnes. Parce que là, on ne voit pas sur le screen et tu ne nous le dis pas non plus donc on est obligés de jouer aux devinettes. >_<
                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 mai 2019 à 19:30:43

                        -
                        Edité par MathiasRando 14 mai 2019 à 19:32:06

                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 mai 2019 à 19:34:27

                          VBigBox1->addWidget(CheckBox1);
                          Tu ajoutes CheckBox1 dans un layout alors qu'il n'est pas initialisé. ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 mai 2019 à 19:55:16

                            Pourtant si dans le finddialog.h.

                            et le pointeur VBigBox1 en haut est dédié à un objet de type QVBoxLayout

                            je ne comprend pas pourquoi il ne serait pas initialiser

                            • Partager sur Facebook
                            • Partager sur Twitter

                            QT: crash du programme

                            × 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