Bonsoir,
Je vous donne mon retour d'expérience sur une migration Qt 4.8.4 vers Qt 5.1.1. ceci a été fait dans une machine virtuelle.
Contexte :
Je compiles à partir de la console, je n'utilise pas Qt Creator. J'utilise la version MinGw. Mon projet a été commencé sous Linux et continué sous Windows.
Je modifie mon code avec l'éditeur Context compile en lançant make ( avec en paramètre debug ou release ). Je lance qmake si je modifie mon .pro.
Mon projet se compose du fichier .pro, d'un main.cpp et d'un fichier .h, de plus j'ai un fichier ressource.qrc et 2 fichiers .png. J'utilise aussi QtXml. C'est un petit projet.
L'installation :
Contrairement à ma version 4.8, le compilateur MinGw est intégré et non à part. Sur Qt4, je devais après l'installation lancer configure.exe, ceci sélectionnant le type de licence et lançant la compilation de qmake et parcourant tous les exemples pour générer les Makefiles. Par ailleurs, Qt Creator est intégré alors qu’auparavant il était à part. Peu importe pour moi, je ne l'utilise pas.
L'exploitation :
J'ai copié mon dossier à l'endroit ou la console s'ouvre comme auparavant, donc se sera un sous-dossier dans c:\qt\qt5.1.1\mingw48_32, le dossier d'installation par défaut.
Je vire ensuite les fichiers temporaires et les makefiles. Je lance ensuite qmake.
J'ai le message WARNING : TARGET is empty affiché 3 fois.
Les fichier Makefile.Debug, Makefile.Release, et Makefile sont bien crées.
Je tente ensuite make
réponse : make n'est pas reconnu comme commande.
Bizarre, je lance donc une recherche sur make.exe : rien
Du coup, je me dis je vais tenter avec QtCreator. Je l'avais testé sur Qt4.
J'ouvre mon fichier dans QtCreator, et lui donne les chemins pour debug et release comme il me le demande
Quand je cliques sur mon fichier .h, j'ai le message "impossible de décoder avec l'encodage UTF-8", je clique sur choisir l'encodage et prend le 1er : ISO-8859-1 : l'encodage de base de Windows. ( ça doit être à cause de Context, mais c'est rien)
Compilation:
je vais dans le menu compiler et fait compiler le projet : plus de 300 erreurs.
Je me rappelle avoir lu qu'il fallait ajouter dans le .pro QT+=Widgets, je fais une recherche là dessus et vois qu'il faut également remplacer #include <QtGui> par #include <QtWidgets>.
Je modifie donc ces éléments, heureusement j'ai un seul .h contenant QtGui, bien qu'il est possible de faire un rechercher/remplacer dans tous les fichiers sans trop de difficultés.
Je fais un exécuter qmake et retente une compilation. 1 erreur, c'est déjà nettement mieux.
L'erreur : class QString has no member named 'toAscii'.
Je fais une recherche et voit que la fonction toAscii est dépréciée. Il faut remplacer par toLatin1, fonction qui existait déjà sous la version 4.
Modification, compilation. Résultat : plus d'erreurs. De là je me dis que finalement QtCreator c'est bien pratique, je clique sur l'erreur il me met direct sur la ligne de code je modifie toAscii par tolatin1 sans même avoir à tout taper, le mot s'auto-affichant (encore merci QtCreator, bien que ce soit une fonction normale pour un IDE)
Je lances ensuite l’exécution : erreur executable does not exist.
Je regarde dans le dossier debug, je vois un fichier avec icône exécutable mais sans nom, et les fichiers objets et générés par moc. Le dossier release lui est complètement vide. Je renomme depuis l'explorateur le fichier .exe avec le nom du projet, je relance exécuter depuis QtCreator. Une fenêtre s'ouvre nommée QtCreator_process_stub.exe s'et la fenêtre de mon appli s'ouvre.
Je teste, mon appli fonctionne.
Reste à gérer la release, n'étant pas familier avec QtCreator, je jette un œil, je vois dans la fenêtre compiler "publier .. " qui est grisé. Je ne sais pas pourquoi, mais je ne sais pas non plus si ça correspond à mon besoin.
Je vois dans le menu compiler ouvrir le sélecteur de kit de compilation, je me place sur release. Je recompile et ça me crée un nouveau fichier exécutable sans nom, mais de même taille que le 1er. Donc ça merde.
J'ai donc cherché à m'en sortir avec la ligne de commande.
Quand je compilais sous Qt4 en lançant make, je voyais en message Mingw32-make, je fais une recherche la dessus et trouve l’exécutable.
Je lances donc Mingw32-make release avec le chemin devant, ça compile, je trouve un .exe dans mon dossier release qui se nomme .exe, je le renommes et le lance : c'est bon. Il est bien plus petit que le debug donc je présumes que c'est correct.
Bilan :
Déjà j'ai lutté 1 peu mais m'en suis sorti.
Je trouve positif que Mingw et QtCreator soit intégré dans l'install, pas besoin de compiler qmake.
Le fait qu'on ne trouve pas make en ligne de commande m'a posé problème. Je ne pense quand même pas être le seul à utiliser cette possibilité. Cela est corrigeable en générant des variables d'environnement comme avant, choix délibéré de Qt d'adopter ce comportement ? Je peux cependant continuer à faire comme je faisais en étant conscient que c'est pas top ou je suis en mesure de m' en sortir avec QtCreator, qui me pose un problème de nom de fichier ( mais idem en ligne de commande ) mais me facilite la vie pour gérer les sources, ça me va. Le problème de nom de fichier doit être solutionnable. Peut-être en modifiant quelque chose dans le .pro.
Je trouve galère de devoir remplacer QtGui par QtWidgets, d'un autre coté, j'ai lu aucune doc avant de me lancer dans l'opération. Je suppose qu'il y a une raison derrière, ils l'ont pas fait pour me faire ch... Mais je trouve quand même chiant qu'en changeant de version, je doive reprendre mon code.
En tout cas, migration réussie. Il faudrait que je teste avec un plus gros projet.
Partager