Bonjour, je reposte ce topic que j'ai posté hier et qui a disparu
Mon problème est le suivant :
Lorsqu'on a fait un widget qui s'integre dans Qt designer, comment le réutiliser par la suite dans un projet différent ?
Voilà plus en détails ce que j'ai fait et l'erreur :
(PS : J'utilise la démo de Qt 4.4.0 et Visual Studio 2008 version complète, Qt est intégré dedans)
1 -
J'ai créé un nouveau plugin pour designer, il s'agit d'une gauge modifiée (cf image ci dessous). Pour la faire, j'ai utilisé VS2008, File>new>project/solution>Qt Designer plugin.
J'ai donc mygauge.h, mygauge.cpp, mygaugeplugin.h, et mygaugeplugin.cpp.
Après compilation, j'ai entre autres un fichier mygauge.lib et un autre mygauge.dll.
2 -
J'ai fais un nouveau projet (genre File>new>project>Qt Application). J'ai un fichier .ui cree automatiquement. Je l'ouvre dans Qt designer et dessus je glisse mon widget mygauge.
3 -
En suite, dans VS2008, si on compile le fichier.ui, le header cree contient automatiquement la ligne suivante :
Je vais donc dans les options de projet pour ajouter le chemin vers ce header et vers la lib :
Code : Sélectionner tout - Visualiser dans une fenêtre à part #include "mygauge.h"
Project Properties>C/C++>General>Additionnal Include Directories et j'ajoute le chemin vers mygauge.h
Project Properties>Linker>General>Additionnal Library Directories et j'ajoute le chemin où y'a mygauge.lib
Project Properties>Linker>General>Additionnal Dependencies et j'ajoute mygauge.lib
4 -
Je compile et j'ai l'erreur suivante :
1>mainform.obj : error LNK2019: unresolved external symbol "public: __thiscall MyGauge::MyGauge(class QWidget *)" (??0MyGauge@@QAE@PAVQWidget@@@Z) referenced in function "public: void __thiscall Ui_dockSensor::setupUi(class QDockWidget *)" (?setupUi@Ui_dockSensor@@QAEXPAVQDockWidget@@@Z)
5 -
A Partir de là, clic droit sur 'header Files' dans l'arborescence de mon projet puis Add>existing item puis je selectionne mygauge.h.
Je recompile, et là les erreurs sont les suivantes (elle se ressemblent toutes, le même type d'erreur pour chacune des mes méthodes dans la classe mygauge):
1>mainform.obj : error LNK2019: unresolved external symbol "public: __thiscall MyGauge::MyGauge(class QWidget *)" (??0MyGauge@@QAE@PAVQWidget@@@Z) referenced in function "public: void __thiscall Ui_dockSensor::setupUi(class QDockWidget *)" (?setupUi@Ui_dockSensor@@QAEXPAVQDockWidget@@@Z)
1>moc_mygauge.obj : error LNK2019: unresolved external symbol "public: void __thiscall MyGauge::setGraduations(int)" (?setGraduations@MyGauge@@QAEXH@Z) referenced in function "public: virtual int __thiscall MyGauge::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MyGauge@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
si j'inclus mygauge.h dans mon projet (copier coller) c'est la même chose.
6 -
La seule solution qui marche est la suivante :
j'inclus mygauge.h ET mygauge.cpp à mon projet sans forcément les copier/coller.
Est-ce la bonne méthode ?
Normalement, est-ce qu'il ne faut pas se contenter d'un .h et de la dll ?
D'ailleurs, j'ai toujours pas pigé la différence entre un .lib et un .dll, ni trop saisi le rôle d'un linker et tout ça.
Partager