Bonjour,
J'utilise le framework Qt 4.6.1 avec Microsoft Visual C++ 2008.
J'ai déjà créé des programmes utilisant Qt qui marchaient très bien.
A présent je veux créer une fenêtre dans laquelle je fais de la 3D en OpenGL.
J'ai donc une classe rubikGl (oui, c'est un rubik's cube) qui dérive de QGLWidget.
Cependant lorsque je tente de compiler j'obtiens le log suivant :
1>mainWindow.cpp
1> link /LIBPATH:"c:\Qt\4.6.1\lib" /NOLOGO /DEBUG /MANIFEST /MANIFESTFILE:"debug\RubikQt.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /OUT:debug\RubikQt.exe @C:\Users\Antoine\AppData\Local\Temp\nmEFFE.tmp 1>mainWindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QGLWidget::QGLWidget(class QWidget *,class QGLWidget const *,class QFlags<enum Qt::WindowType> )" (__imp_??0QGLWidget@@QAE@PAVQWidget@@PBV0@V?$QFlags@W4WindowType@Qt@@@@@Z) referenced in function "public: __thiscall rubikGL::rubikGL(class QWidget *)" (??0rubikGL@@QAE@PAVQWidget@@@Z)
1>mainWindow.obj : error LNK2001: unresolved external symbol "protected: virtual bool __thiscall QGLWidget::event(class QEvent *)" (?event@QGLWidget@@MAE_NPAVQEvent@@@Z)
1>mainWindow.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QGLWidget::paintEvent(class QPaintEvent *)" (?paintEvent@QGLWidget@@MAEXPAVQPaintEvent@@@Z)
1>NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\link.EXE"' : return code '0x460'
1>mainWindow.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QGLWidget::resizeEvent(class QResizeEvent *)" (?resizeEvent@QGLWidget@@MAEXPAVQResizeEvent@@@Z)
1>Stop.
1>mainWindow.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall QGLWidget::updateGL(void)" (?updateGL@QGLWidget@@UAEXXZ)
1>mainWindow.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall QGLWidget::updateOverlayGL(void)" (?updateOverlayGL@QGLWidget@@UAEXXZ)
1>mainWindow.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall rubikGL::initializeGL(void)" (?initializeGL@rubikGL@@UAEXXZ)
1>mainWindow.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QGLWidget::resizeGL(int,int)" (?resizeGL@QGLWidget@@MAEXHH@Z)
1>mainWindow.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall rubikGL::paintGL(void)" (?paintGL@rubikGL@@UAEXXZ)
1>mainWindow.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QGLWidget::initializeOverlayGL(void)" (?initializeOverlayGL@QGLWidget@@MAEXXZ)
1>mainWindow.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QGLWidget::resizeOverlayGL(int,int)" (?resizeOverlayGL@QGLWidget@@MAEXHH@Z)
1>mainWindow.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QGLWidget::paintOverlayGL(void)" (?paintOverlayGL@QGLWidget@@MAEXXZ)
1>mainWindow.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QGLWidget::glInit(void)" (?glInit@QGLWidget@@MAEXXZ)
1>mainWindow.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall QGLWidget::glDraw(void)" (?glDraw@QGLWidget@@MAEXXZ)
1>mainWindow.obj : error LNK2001: unresolved external symbol "public: virtual class QPaintEngine * __thiscall QGLWidget::paintEngine(void)const " (?paintEngine@QGLWidget@@UBEPAVQPaintEngine@@XZ)
1>mainWindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QGLWidget::~QGLWidget(void)" (__imp_??1QGLWidget@@UAE@XZ) referenced in function "public: virtual __thiscall rubikGL::~rubikGL(void)" (??1rubikGL@@UAE@XZ)
1>moc_rubikGL.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual void * __thiscall QGLWidget::qt_metacast(char const *)" (__imp_?qt_metacast@QGLWidget@@UAEPAXPBD@Z) referenced in function "public: virtual void * __thiscall rubikGL::qt_metacast(char const *)" (?qt_metacast@rubikGL@@UAEPAXPBD@Z)
1>moc_rubikGL.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual int __thiscall QGLWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (__imp_?qt_metacall@QGLWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z) referenced in function "public: virtual int __thiscall rubikGL::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@rubikGL@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>moc_rubikGL.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static struct QMetaObject const QGLWidget::staticMetaObject" (__imp_?staticMetaObject@QGLWidget@@2UQMetaObject@@B)
1>debug\RubikQt.exe : fatal error LNK1120: 19 unresolved externals |
Le .h de ma classe rubikGl :
Code :
- class rubikGL : public QGLWidget
- {
- Q_OBJECT
- public:
- rubikGL(QWidget *parent)
- : QGLWidget(parent) {}
- void initializeGL();
- void paintGL();
- };
|
L'utilisation de cette classe dans mainWindow.cpp :
Code :
- rubikGL *rubiksCube = new rubikGL(this);
- layout = new QGridLayout(this);
- layout->addWidget(rubiksCube, 1,1, 8,1);
|
En cherchant sur internet j'ai déjà trouvé ceci :
- Apparemment c'est un problème de Meta Object, il faut "faire tourner moc" sur la classe qui dérive de QGLWidget. Je n'ai pas trop compris ce qu'était ce moc, mais je compile grâce à la commande "qmake -project & qmake & nmake" et j'ai également lu que cette commande gère toute seule tout ce qui est "moc"
- Ajouter qt += opengl dans le fichier .pro -> n'a rien changé
- Ajouter Q_OBJECT dans le .h -> déjà fait (cf code ci-dessus)
Je suis donc un peu perdu, j'espère que je vous ai bien exposé mon problème et que vous saurez me débloquer car c'est assez frustrant !
D'avance merci!