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:

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
Mon code est celui du tuto mais pour simplifier la lecture a ceux qui voudrai bien m aider je le réécris ici :

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 :

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
Pour info si je lance :
"c:\qt\2010.02.1\qt\bin\moc.exe MaFenetre.h -o moc_MaFenetre.cpp"
J'obtiens :

MaFenetre.h(0): Warning: No relevant classes found. No output generated.
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.

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.