Bonjour,
Je tiens tout d abord à vous prévenir que je suis très débutant. Je vous remercie donc de bien vouloir m'excuser si ce que j'écris semble débile.
J'ai suivit un tutoriel c++ d'un site jusqu'à l'étape ou dans Qt on utilise les slot perso et ou on fait appelle au "Q_OBJECT" dans le header MaFenetre.
Jusque la tout fonctionnait bien, mais a partir de ce point lorsque je compile j'obtiens les erreurs suivantes:
Mon code est celui du tuto mais pour simplifier la lecture a ceux qui voudrai bien m aider je le réécris ici :Error 1 error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall MaFenetre::metaObject(void)const " (?metaObject@MaFenetre@@UBEPBUQMetaObject@@XZ) MaFenetre.obj testqtd
Error 2 error LNK2001: unresolved external symbol "public: virtual void * __thiscall MaFenetre::qt_metacast(char const *)" (?qt_metacast@MaFenetre@@UAEPAXPBD@Z) MaFenetre.obj testqtd
Error 3 fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\link.EXE"' : return code '0x460' NMAKE testqtd
Error 4 error LNK2001: unresolved external symbol "public: virtual int __thiscall MaFenetre::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MaFenetre@@UAEHW4Call@QMetaObject@@HPAPAX@Z) MaFenetre.obj testqtd
Error 5 fatal error LNK1120: 3 unresolved externals debug\testqtd.exe testqtd
Error 6 fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\nmake.exe"' : return code '0x2' NMAKE testqtd
Error 7 error PRJ0019: A tool returned an error code from "Performing Makefile project actions" testqtd testqtd
Code MaFenetre.h : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #ifndef DEF_MAFENETRE #define DEF_MAFENETRE #include <QApplication> #include <QObject> #include <QWidget> #include <QPushButton> #include <QLCDNumber> #include <QSlider> class MaFenetre : public QWidget { Q_OBJECT public: MaFenetre(); public slots: void changerLargeur(int largeur); private: QSlider *m_slider; }; #endif
Code MaFenetre.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include "MaFenetre.h" void MaFenetre::changerLargeur(int largeur) { setFixedSize(largeur, 100); } MaFenetre::MaFenetre() : QWidget() { setFixedSize(200, 100); m_slider = new QSlider(Qt::Horizontal, this); m_slider->setRange(200, 600); m_slider->setGeometry(10, 60, 150, 20); QObject::connect(m_slider, SIGNAL(valueChanged(int)), this, SLOT(changerLargeur(int))); }
Code main.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <QtGui/QApplication> #include "MaFenetre.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); MaFenetre fenetre; fenetre.show(); return app.exec(); }
Il semblerai après plusieurs recherches sur le net que j'ai un problème lié au MOC (ou quelque chose comme ca... tout cela reste très obscure pour moi).
Actuellement, j'utilise Visual Studio 2008 sp1 et Qt SDK 2010.02.1, en utilisant un autre tutoriel j'ai réussi plus ou moins a faire la config de visual studio pour compiler et lancer mon projet (cela fonctionnait bien jusqu'à l'histoire du "Q_OBJECT").
Si j essaye de passer par ligne de commande voici le résultat :
Pour info si je lance :qmake -project
=> QFileinfo::absolutePath: Constructed with empty filename
qmake
=> rien ne s ecrit
mingw32-make
=>plein de Warning: null charactere(s) ignored et a la fin
=>MaFenetre.cpp:1: error: 'i' does not name type
=>MaFenetre.cpp:1: error: 'M' does not name type
=>mingw32-make[1]: ***[debug/MaFenetre.o] Error 1
=>mingw32-make[1]: Leaving directory '.........chemin du projet
=>mingw32-make: ***[debug] Error 2
J'obtiens :"c:\qt\2010.02.1\qt\bin\moc.exe MaFenetre.h -o moc_MaFenetre.cpp"
J'ai vu d'autres tutos qui disaient d'essayer de mettre le moc.exe dans les outils externes, j'ai aussi essayé ça mais la encore VS me dit qu'il ne trouve aucun fichier à moc'er pourtant "Q_OBJECT" est bien dans ma classe.MaFenetre.h(0): Warning: No relevant classes found. No output generated.
J'ai aussi essayé un autre truc faisant référence a "Custom Build Step" mais malheureusement je n'arrive pas a trouver ce custom build step dans ma version de VS.
Voila, j'espère vous avoir fournie assez d'info pour que vous puissiez m'aider car j'aimerai vraiment pouvoir continuer ce tuto.
Merci d avance pour ceux qui voudront bien m'aider.
Partager