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

  1. #1
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    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.
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    mars 2004
    Messages
    10 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 031
    Points : 13 967
    Points
    13 967
    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 averti Avatar de MacPro
    Profil pro
    Inscrit en
    novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    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é
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    mars 2004
    Messages
    10 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 031
    Points : 13 967
    Points
    13 967
    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 averti Avatar de MacPro
    Profil pro
    Inscrit en
    novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    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
    ?
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    mars 2004
    Messages
    10 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 031
    Points : 13 967
    Points
    13 967
    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 averti Avatar de MacPro
    Profil pro
    Inscrit en
    novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    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).
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    mars 2004
    Messages
    10 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 031
    Points : 13 967
    Points
    13 967
    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.

  9. #9
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    Oui, j'avais regardé la doc (comme toujours avant de poser les questions pour être quitte de me faire jeter )

    J'ai trouvé le problème :

    J'ai crée mon plugin avec le wizard de Qt integré à VS2008 pour créer des customwidget plugin pour designer, et j'ai pensé que ça faisait ce qu'il fallait.

    Mais non, pas totalement...

    j'avais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class MyGauge : public QWidget
    , j'ai donc rajouté QDESIGNER_WIDGET_EXPORT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class QDESIGNER_WIDGET_EXPORT MyGauge : public QWidget
    La macro Q_EXPORT_PLUGIN2() est quant à elle déjà présente.

    Voilà, merci des réponses. Du coup, j'ai fais sauté le mygauge.h de mon projet. Dernier truc qui me titille : Comment faire pour que je n'aie pas à copier-coller mygauge.dll à côté de mon exécutable ?
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    mars 2004
    Messages
    10 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 031
    Points : 13 967
    Points
    13 967
    Par défaut
    Citation Envoyé par Kestufou Voir le message
    . Dernier truc qui me titille : Comment faire pour que je n'aie pas à copier-coller mygauge.dll à côté de mon exécutable ?
    Il te faut un repertoire ou tu y met tes dll et tu l'ajoute dans le PATH système

  11. #11
    Membre averti Avatar de MacPro
    Profil pro
    Inscrit en
    novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : novembre 2007
    Messages : 367
    Points : 344
    Points
    344
    Par défaut
    ouais, c'est ce que je fais habituellement, bon là pour le coup, j'ajoute en PATH le repertoire $QTDIR\plugins\Designer, c'est pratique, car mes plugins ils se 'buildent' directement dedans. Bref, je pense que ce sujet peut être clos.
    Lorsque vous avez trouvé solution à votre problème, n'oubliez pas de cliquer en bas de la page
    Besoin d'un photographe de mariage : http://www.triangle-photo.fr

+ 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