[C++] Qt slots personnalisés erreure bizarre [Résolu/Fermé]

Signaler
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
-
 Kery -
Bonjour,

Je fais un programme avec Qt et j'ai besoin de faire un slot pour ma classe FenPrincipale qui va ouvrir un document XML et en faire un tableau. Le problème c'est que à chaque fois que je compile, j'obtiens une seule erreur et c'est "collect2: ld returned 1 exit status", mais l'erreur disparait dès que j'enlève la ligne "public slots:", voici le header de ma classe:
#ifndef HEADER_FENPRINCIPALE 
#define HEADER_FENPRINCIPALE 

#include <QtGui> 
#include <QString> 
#include <QFile> 
#include <QObject> 

class FenPrincipale : public QMainWindow 
{ 
Q_OBJECT 
        public: 
                FenPrincipale(); 
            public slots: 

                int setDocument(QString filename); 
                int newDocument(); 
                int saveDocument(); 
            private slots: 
                int parseDocument(); 
                int openDocument(); 

        private: 

            QString nomDocument; 
            QFile document; 

}; 


#endif 


le .cpp:
#include "fenprinclpale.h"
#include <QtGui>
#include <QApplication>
#include <QWIdget>
#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>
#include <QTableView>
#include <QMenu>
#include <QAction>
#include <QFile>
#include <QtXml/QDomDocument>
#include <QtXml/QDomNode>
#include <QIODevice>


FenPrincipale::FenPrincipale()
{
    QWidget *centralWidget = new QWidget;
    centralWidget->setMinimumSize(400,200);
    //ACTIONS
    //Files
    QAction *New = new QAction("&New",this);
    QAction *Open = new QAction("&Open",this);
    QAction *Exit = new QAction("&Exit",this);
    //Edit
    QAction *NewEntry = new QAction("New &Entry",this);
    //Help
    QAction *Help = new QAction("&Help",this);
    QAction *About = new QAction("About &Qt",this);
    //CONNECT
        connect(Exit,  SIGNAL(triggered()), qApp, SLOT(quit()));
        connect(About, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
        connect(Open, SIGNAL(triggered()), this, SLOT(setDocument()));

    //MENUS
    QMenu *menuFiles = menuBar()->addMenu("&Files");
        menuFiles->addAction(New);
        menuFiles->addAction(Open);
        menuFiles->addAction(Exit);
    QMenu *menuEdit = menuBar()->addMenu("&Edit");
        menuEdit->addAction(NewEntry);
    QMenu *menuHelp = menuBar()->addMenu("&Help");
        menuHelp->addAction(Help);
        menuHelp->addAction(About);
    //WIDGETS
    QLineEdit *searchLine = new QLineEdit;
    QPushButton *NewButton = new QPushButton("New Entry");
    QPushButton *searchButton = new QPushButton("Search");
    QTableView *table = new QTableView;
    QGridLayout *centralLayout = new QGridLayout;
    //LAYOUT
    centralLayout->addWidget(searchLine,1,1);
    centralLayout->addWidget(searchButton,1,2);
    centralLayout->addWidget(table,2,1,1,2);
    centralLayout->addWidget(NewButton,3,1,1,2);
    centralWidget->setLayout(centralLayout);
    setCentralWidget(centralWidget);
    setWindowTitle("Encrypted Database Manager");

}

int FenPrincipale::setDocument(QString filename)
{
    nomDocument = QFileDialog::getOpenFileName(this, "Open a file", QString(), "Databases (*.db)");
    return openDocument();

}
int FenPrincipale::openDocument()
{
    document.setFileName(nomDocument);
    return parseDocument();
}
int FenPrincipale::parseDocument()
{

    QDomDocument doc( "table" );
    QFile file( nomDocument );
    if( !file.open( QIODevice::ReadOnly ) )
      return -1;
    if( !doc.setContent( &file ) )
    {
      file.close();
      return -2;
    }
    file.close();

    return 0;
}


Je travaille avec Qt depuis peu de temps et je suis persuadé que mon erreure est stupide, mais je n'ai pas réussi à en trouver la cause. Pour ceux qui se demandent, oui moc_fenprincipale.cpp est généré pendant le build. Et si ça peut aider, je vois mon programme apparaître (caché) et disparaître une seconde plus tard avant de reçevoir l'erreur.


Regardez ma devise!

3 réponses

Messages postés
698
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
135
La déclaration de ta classe me paraît correcte.
La partie compilation se passe bien; par contre la partie édition des liens échoue: il lui manque donc quelque chose... mais je ne sais quoi !
Personnellement je commencerai par effacer tous les fichiers générés (évidemment pas les sources ;-) ) et je regénérerai le 'make'.
Bonne continuation.
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
42
J'ai efface tout ce qui avait été généré automatiquement et j'ai refait qmake, toujours la même erreure. Est-ce que je dois ajouter une librarie statique (.a) moi-même ou autre chose que j'aurais pu oublier?
Messages postés
698
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
135
Tu dis que le programme se lance et s'arrête aussitôt: donc, si j'ai bien compris, l'exécutable est généré, s'exécute et s'arrête sur cette erreur; il est donc probable qu'il ne trouve pas une des bibliothèques ou que l'une d'elles est erronée.
Sous Linux, il existe un utilitaire ('ldd') qui permet de savoir de quelles bibliothèques un exécutable a besoin et si ces bibliothèques sont trouvées par le chargeur dynamique. On peut alors en rechercher la cause.
Désolé mais je ne puis t'aider davantage.
Messages postés
180
Date d'inscription
lundi 31 décembre 2007
Statut
Membre
Dernière intervention
21 juillet 2012
42
En fin de compte j'avais raison, mon erreur était très stupide: j'avais déclaré des fonctions dans le .h de ma classe sans en reparler dans le .cpp... d'habitude je le void tout de suite mais QtCreator ne l'affiche pas comme erreure, il faut aller dans compiler output, mais je crois que l'erreur vient des moc alors je comprends pourquoi.
Je te remerci Wazza6 tu peux pas savoir comme tes posts m'ont été a débloquer ma situation ^^