[C++] Qt slots personnalisés erreure bizarre
Résolu
Wazza6
Messages postés
180
Date d'inscription
Statut
Membre
Dernière intervention
-
Kery -
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:
le .cpp:
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!
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:
- [C++] Qt slots personnalisés erreure bizarre
- Qt sdk - Télécharger - Langages
- Gametwist slots jeux de casino - Télécharger - Divers Jeux
- Qt web - Télécharger - Navigateurs
- Erreur de segmentation c - Forum C
- Plinko slots avis ✓ - Forum Vos droits sur internet
3 réponses
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.
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.
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.
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.