[C++] Qt slots personnalisés erreure bizarre

Résolu/Fermé
Wazza6 Messages postés 180 Date d'inscription lundi 31 décembre 2007 Statut Membre Dernière intervention 21 juillet 2012 - Modifié par Wazza6 le 12/11/2010 à 02:38
 Kery - 26 janv. 2011 à 00:20
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!
A voir également:

3 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
12 nov. 2010 à 02:46
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.
0
Wazza6 Messages postés 180 Date d'inscription lundi 31 décembre 2007 Statut Membre Dernière intervention 21 juillet 2012 40
Modifié par Wazza6 le 12/11/2010 à 02:56
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?
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
12 nov. 2010 à 03:23
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.
0
Wazza6 Messages postés 180 Date d'inscription lundi 31 décembre 2007 Statut Membre Dernière intervention 21 juillet 2012 40
12 nov. 2010 à 03:16
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.
0
Je te remerci Wazza6 tu peux pas savoir comme tes posts m'ont été a débloquer ma situation ^^
0