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

Discussion :

Compilation avec Qt et MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Compilation avec Qt et MFC
    Bonjour à tous,

    Je vous présente mon problème. J'ai un projet MFC développé avec visual studio 2010 dans lequel je souhaite utiliser la librairie Qt.
    Mon problème est que je ne souhaite pas faire de .pro mais garder mon projet visual et y incorporer Qt, comme on pourrait faire avec OpenGL par ex.

    J'utilise la partie <Qtnetwork>.
    Quelles sont les options de compilation / les librairies à ajouter afin de pouvoir compiler mon projet ?

    Pour info :
    - je débute totalement en Qt
    - après recherche, je ne trouve pas de liens de projet Qt qui ne sont pas des .pro

    Merci d'avance pour vos réponses.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Bonjour,

    Au pire ça ne te coûte rien de générer le .pro avec qmake -project et de regarder son contenu.

    Les bibliothèques sont dans le dossier libs de Qt, et les dll dans le dossier bin (jusque là je ne t'apprends rien). Il te faut au moins QtCore et QtNetwork donc. Dans le .pro, tu verrais "Qt += core network ..." ce qui t'indique les libs que tu utilises.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Troudhyl Voir le message
    Bonjour,

    Au pire ça ne te coûte rien de générer le .pro avec qmake -project et de regarder son contenu.

    Les bibliothèques sont dans le dossier libs de Qt, et les dll dans le dossier bin (jusque là je ne t'apprends rien). Il te faut au moins QtCore et QtNetwork donc. Dans le .pro, tu verrais "Qt += core network ..." ce qui t'indique les libs que tu utilises.
    Merci pour ta réponse.
    Alors j'ai regardé dans le .pro, il y a juste marqué "QT += network".

    donc arrêtes moi si je me trompe, mais je n'ai donc qu'a ajouter dans les lib supplémentaires les libs de Qt et les dll.
    et si je génère ma solution .sln visual studio, ceci devrait compiler le code MFC ainsi que le code Qt ajouté ? c'est aussi simple que çà ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'ai ajouté à mon projet visual les éléments suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Autres répertoires include : 
    $(QTDIR)\lib
    $(QTDIR)\include
    $(QTDIR)\bin
     
    dépendances supplémentaires :
    $(QTDIR)\lib\QtGui4.lib 
    $(QTDIR)\lib\QtNetwork4.lib
    $(QTDIR)\lib\QtCore4.lib
    et j'ai 8 externes non résolus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    1>client.obj : error LNK2019: symbole externe non résolu "protected: void __thiscall client::connectionState(enum QAbstractSocket::SocketState,class QHostAddress)" (?connectionState@client@@IAEXW4SocketState@QAbstractSocket@@VQHostAddress@@@Z) référencé dans la fonction "private: void __thiscall client::statoSocket(enum QAbstractSocket::SocketState)" (?statoSocket@client@@AAEXW4SocketState@QAbstractSocket@@@Z)
    1>client.obj : error LNK2001: symbole externe non résolu "public: virtual struct QMetaObject const * __thiscall client::metaObject(void)const " (?metaObject@client@@UBEPBUQMetaObject@@XZ)
    1>client.obj : error LNK2001: symbole externe non résolu "public: virtual void * __thiscall client::qt_metacast(char const *)" (?qt_metacast@client@@UAEPAXPBD@Z)
    1>client.obj : error LNK2001: symbole externe non résolu "public: virtual int __thiscall client::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@client@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
    1>open.obj : error LNK2001: symbole externe non résolu "public: static struct QMetaObject const open::staticMetaObject" (?staticMetaObject@open@@2UQMetaObject@@B)
    1>open.obj : error LNK2001: symbole externe non résolu "public: virtual struct QMetaObject const * __thiscall open::metaObject(void)const " (?metaObject@open@@UBEPBUQMetaObject@@XZ)
    1>open.obj : error LNK2001: symbole externe non résolu "public: virtual void * __thiscall open::qt_metacast(char const *)" (?qt_metacast@open@@UAEPAXPBD@Z)
    1>open.obj : error LNK2001: symbole externe non résolu "public: virtual int __thiscall open::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@open@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
    un oubli de lib ? une idée de laquelle ?

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 601
    Points
    188 601
    Par défaut
    Tu n'as pas utilisé de .pro avec qmake pour générer ton projet, fort probablement, alors que ta classe hérite de QObject et est flanquée de la macro Q_OBJECT. Il faut encore implémenter toutes les méthodes ajoutées par cette macro (c'est l'objectif du moc, appelé automatiquement par qmake et les fichiers de projet qu'il génère).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  6. #6
    Membre éprouvé

    Profil pro
    Responsable logiciel
    Inscrit en
    Octobre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable logiciel

    Informations forums :
    Inscription : Octobre 2010
    Messages : 223
    Points : 1 183
    Points
    1 183
    Par défaut
    Tu ne peux pas (plus simplement) utiliser le Qt VS add-in (http://qt.nokia.com/downloads/visual-studio-add-in) ?
    Normalement il peut générer un .sln à partir d'un .pro, et ensuite tu devrais pouvoir intégrer ton projet dedans (ou le contraire).

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    @dourouc05 : je n'utilise pas de .pro car je souhaiterais juste intégrer dans mon projet .sln (fait en MFC) des fonctions de Qtnetwork. cela est-il possible ?

    alors que ta classe hérite de QObject et est flanquée de la macro Q_OBJECT. Il faut encore implémenter toutes les méthodes ajoutées par cette macro (c'est l'objectif du moc, appelé automatiquement par qmake et les fichiers de projet qu'il génère).
    je n'ai pas compris


    @idiallo :
    Normalement il peut générer un .sln à partir d'un .pro, et ensuite tu devrais pouvoir intégrer ton projet dedans (ou le contraire).
    tu me conseilles de faire un projet .pro avec mes classes de QtNetwork en utilisant Qt VS add-in puis je le convertis en .sln, puis j'integre comment les éléments de ce projet à mon .sln existant ?

    en tout cas merci pour vos réponses.

  8. #8
    Membre éprouvé

    Profil pro
    Responsable logiciel
    Inscrit en
    Octobre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable logiciel

    Informations forums :
    Inscription : Octobre 2010
    Messages : 223
    Points : 1 183
    Points
    1 183
    Par défaut
    Citation Envoyé par infernal1022 Voir le message
    @idiallo :

    tu me conseilles de faire un projet .pro avec mes classes de QtNetwork en utilisant Qt VS add-in puis je le convertis en .sln, puis j'integre comment les éléments de ce projet à mon .sln existant ?
    Le .pro peut être créé à la main ou avec QtCreator, ensuite tu l'importe dans un .sln avec l'add-in. Une fois que tu as tes deux .sln, je pense que tu peux charger un projet dans l'autre avec l'option "Add existing project" de VS (accès par clic droit sur la solution).

  9. #9
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 601
    Points
    188 601
    Par défaut
    Citation Envoyé par infernal1022 Voir le message
    @dourouc05 : je n'utilise pas de .pro car je souhaiterais juste intégrer dans mon projet .sln (fait en MFC) des fonctions de Qtnetwork. cela est-il possible ?
    Si tu ne veux qu'ajouter des bibliothèques et des en-têtes dans la configuration, non, il faut aller voir un peu plus loin, Qt n'est pas une si petite bibliothèque .

    Citation Envoyé par infernal1022 Voir le message
    je n'ai pas compris
    Le détail de ce qui se passe, ce qui fait que tu ne peux pas simplement ajouter deux-trois paramètres à l'appel du compilateur . Cf. http://louis-du-verdier.developpez.com/qt/fondations/ pour les détails.

    Citation Envoyé par infernal1022 Voir le message
    tu me conseilles de faire un projet .pro avec mes classes de QtNetwork en utilisant Qt VS add-in puis je le convertis en .sln, puis j'integre comment les éléments de ce projet à mon .sln existant ?
    Avec qmake, tu pourras générer un fichier de projet (.vcproj ou .vcxproj) avec qmake -tp vc, que tu pourras mettre dans ta solution. Ce projet s'occupera de toutes les bizarreries utilisées par Qt pour les signaux et slots, notamment. Tu peux aussi générer le .pro avec qmake directement (qmake -project), si tu ne veux pas passer par Qt Creator (il faut définir les modules que tu utilises).

    @idiallo : qmake ne génère pas par défaut de fichier de solution, juste des projets ; sous VS, c'est alors facile d'ajouter un projet Qt dans n'importe quelle solution.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  10. #10
    Membre éprouvé

    Profil pro
    Responsable logiciel
    Inscrit en
    Octobre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable logiciel

    Informations forums :
    Inscription : Octobre 2010
    Messages : 223
    Points : 1 183
    Points
    1 183
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Avec qmake, tu pourras générer un fichier de projet (.vcproj ou .vcxproj) avec qmake -tp vc, que tu pourras mettre dans ta solution. Ce projet s'occupera de toutes les bizarreries utilisées par Qt pour les signaux et slots, notamment. Tu peux aussi générer le .pro avec qmake directement (qmake -project), si tu ne veux pas passer par Qt Creator (il faut définir les modules que tu utilises).

    @idiallo : qmake ne génère pas par défaut de fichier de solution, juste des projets ; sous VS, c'est alors facile d'ajouter un projet Qt dans n'importe quelle solution.
    Ah oui aussi, je n'avais pas vu qu'on pouvait le faire directement en ligne de commande. NB pas de problème non plus avec l'add-in, les sln contiennent aussi des projets et on peut intégrer les uns dans les autres à partir de VS. L'avantage de l'add-in est de contenir quelques facilités supplémentaires propres à l'intégration VS-Qt.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci dourouc05 pour tes réponses. effectivement je me rends compte que Qt est assez complexe à mettre en place comme librairie, je m'arrache un peu les cheveux !

    C'est dommage qu'on ne puisse pas facilement la mettre en place comme une libraire comme OpenGL.

    Je vais continuer mon intégration en suivant tes conseils et je verrais si ca fonctionne ainsi.

    As-tu déjà mêler un projet MFC et du code Qt ?

  12. #12
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 601
    Points
    188 601
    Par défaut
    Citation Envoyé par infernal1022 Voir le message
    As-tu déjà mêler un projet MFC et du code Qt ?
    Du tout, jamais touché aux MFC . Pour moi, le plus simple serait de partir d'un projet Qt avec un .pro, de le configurer avec les modules Qt à utiliser, ainsi que les variables qui vont bien pour utiliser les MFC (.lib à lier, il me semble que VS connaît le chemin pour le reste , mais à voir si ça plante), générer le projet, utiliser joyeusement pour développer... jusqu'au jour où tu auras besoin d'ajouter un fichier pour une classe dérivant de QObject, où il faudra mettre à jour le .pro et le projet.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Du tout, jamais touché aux MFC . Pour moi, le plus simple serait de partir d'un projet Qt avec un .pro, de le configurer avec les modules Qt à utiliser, ainsi que les variables qui vont bien pour utiliser les MFC (.lib à lier, il me semble que VS connaît le chemin pour le reste , mais à voir si ça plante), générer le projet, utiliser joyeusement pour développer... jusqu'au jour où tu auras besoin d'ajouter un fichier pour une classe dérivant de QObject, où il faudra mettre à jour le .pro et le projet.
    ok je vois le genre ! justement ce que je ne voudrais pas faire je vais continuer de creuser pour voir comment je peux intégrer mon code Qt.
    Merci pour l'aide en tout cas.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/06/2008, 09h09
  2. [MFC]erreur de compilation avec codejock
    Par k_boy dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 29/06/2007, 12h14
  3. [MFC] Problème de compilation avec afxctl.h
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 15/06/2004, 13h51
  4. [JB9][EJB]Compiler avec Make ou javac ?
    Par _gtm_ dans le forum JBuilder
    Réponses: 4
    Dernier message: 11/07/2003, 15h59
  5. Compilation avec un Makefile
    Par Mau dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 28/02/2003, 11h30

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