IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Utilisation dans un projet visual studio d'un widget créé pour Qt Designer


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut Utilisation dans un projet visual studio d'un widget créé pour Qt Designer
    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 :

    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.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut
    Citation Envoyé par Kestufou Voir le message
    Bonjour, je reposte ce topic que j'ai posté hier et qui a disparu
    http://www.developpez.net/forums/sho...d.php?t=591335

  3. #3
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    oui oui, j'avais vu hier que le serveur il galérait. Mais ce matin, j'ai vu mon topic (il avais dû rester en cache dans le naviguateur) alors j'ai pensé qu'il était bien passé

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut
    Citation Envoyé par Kestufou Voir le message
    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.
    J'avais un peu zappé ce thread...

    Ton problème et que tu ne link pas avec mygauge.lib dans ton projet. Et donc le compilot ne trouve pas les symboles des méthodes liées à ta jauge.

    Il faut le rajouter dans les input du link de visual.
    Ou dans le .pro si tu utilise qmake.

  5. #5
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    N'est-ce pas ce que j'ai fais là :

    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
    ?

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    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>input>Additionnal Dependencies et t'ajoute mygauge.lib


    ben ca devrait être bon alors.... Le .h ne sert qu'a la compile qui marche

    le .lib sert au link. Seulement il ne semble pas le prendre en compte. Pourquoi? là je sais pas... Es tu sûr d'avoir ajouter mygauge.lib?

  7. #7
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    Oui, quasi certain. Je viens de refaire les tests, toujours pareil
    De plus, je me sers de plusieurs composants externes de la même manière et je n'ai jamais de problèmes (exemple avec les Qwtplot3D ou qwtplot).

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    tu as regardé
    http://qt.developpez.com/doc/4.4/des...ustom-widgets/
    en particulier

    Plugin Requirements

    In order for plugins to work correctly on all platforms, you need to ensure that they export the symbols that are needed by Qt Designer.

    First of all, the plugin class must be exported in order for the plugin to be loaded by Qt Designer. Use the Q_EXPORT_PLUGIN2() macro to do this.

    Additionally, each custom widget class in a plugin that you want to be instantiated by Qt Designer must be defined using the QDESIGNER_WIDGET_EXPORT macro.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/01/2015, 13h28
  2. Utilisation d'une dll dans un projet Visual Studio 2008 [C#]
    Par rhoblik dans le forum Visual Studio
    Réponses: 2
    Dernier message: 19/06/2014, 15h16
  3. Utiliser GNU gettext dans un projet visual studio c++
    Par sentza dans le forum Débuter
    Réponses: 1
    Dernier message: 08/01/2012, 19h20
  4. Réponses: 1
    Dernier message: 27/09/2010, 11h56
  5. Réponses: 10
    Dernier message: 12/12/2006, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo