====== Commit 2006-11-30 ====== ===== Modifs ===== * **Nettoyage**: (commité précédemment sans explication sur le site) * J'ai viré les macros ''OEMTK'', ''OEMTK_USING'', ''OEMTK_BEGIN'', ''OEMTK_END''. Pareil pour ''MTVIZ'', ''MTFEM'' et ''MTGEO''. Bref, au lieu d'utiliser ''OEMTK::Vect3'', écrivez ''mtMath::Vect3'' et au lieu de ''MTGEO_USING'', écrivez ''using namespace mtGeo''. * **Migration Qt 4.2.1**: * Vu que nous venons de prolonger la licence Qt, j'ai mis à jour les routines pour utiliser la dernière version. De plus, je viens de recevoir le bouquin de Blanchette sur Qt 4 ; j'ai donc tout en main pour y arriver. * Quelques notes sur Qt 4: * Interface unifiée et code plus propre. * Changement d'interface très important par rapport à Qt 3. * Bibliothèque divisée en plusieurs DLL (''QtCore4'', ''QtGui4'', ''QtNetwork4'', etc). * Versions release et debug disponibles. * Version GPL disponible. * QtDesigner complètement modifié au niveau de la philosophie de travail. En particulier, le QtDesigner ne crée plus des widgets mais des constructeurs de widgets. * Migration soi-disant simple et assistée de Qt 3 à Qt 4 (''qt3to4.exe'' et une lib avec les anciens widgets nommée ''Qt3Support'') - voir ci-dessous. * Etapes de migration (je les énumère ici pour me souvenir de cette galère qui devait ne durer qu'une demi-jounée au départ) * Installation de Qt (première merde: la version GPL ne compile pas avec .NET) * Migration automatique du code grâce à ''qt3toqt4''. correction manuelle du résultat. * Surprise suivante: la conversion des fichiers du QtDesigner supprime tous les signaux/slots => utilisation de ''uic3'' qui permet de faire cohabiter Qt 3 et Qt 4. * Bien sûr, la gestion des threads a été modifiée: il faut remplacer la communication par ''events'' par une communication par signaux/slots. * Tout compile et linke mais ça marche pas: les version Qt release et debug se mélangent grâce à VTK. En résumé, puisque VTK nomme ses DLL release et debug de la même manière, nous n'avons pas d'autre choix que de linker Metafor avec une seule version de VTK (la release p expl) mais, puisque celle-ci utilise Qt (release), on a un conflit quand on lance Metafor en debug. J'ai donc du ruser pour utiliser également une seule version de Qt pour les 2 versions de Metafor. * Content de ce résultat, je convertis les anciens ''ui'' de la version 3 à la version 4. Les signaux/slots peuvent être récupérés grâce à l'output d' ''uic3''. * Naivement, je pense être arrivé à une version full Qt 4 et j'enlève la bibliothèque ''Q3Support''. Erreur, il reste à modifier presque tous les appels de fonction un peu partout dans le code. * Je porte le résultat sous Unix après avoir recompilé VTK et Qt partout. * Ce qui ne fonctionne plus: * Les fenêtres ''VizWin'' ne sauvent plus leur taille dans la config * La version Unix fait parfois une "erreur de segmentation". Pour la supprimer, virez le repertoire ''~/.qt'' * La scalarbar n'est plus déplaçable à la souris. * Les polices de caractères de Qt 4 sont pourries sous X-Win32 => je vous conseille le serveur X de cygwin qui marche très bien à ce niveau. * Le drag & drop entre ''BWin'' et l'object browser provoque une petite erreur sur la console (mais ça marche). * Les polices utilisées sont trop petites sous Unix. * Ce qui a été corrigé: * Le Qt Designer 4 a une sorte de bug lorsqu'on met des ''QFrame'' dans un widget: le widget se resize mal (uniquement dans le designer). le problème vient de la propriété ''minimumSize'' qui est à [16,16] par défaut et qu'il faut mettre à [0,0]. * Les settings Qt ne fonctionnaient plus sous Unix. Simplement parce que le ''.qt'' n'est plus utilisé dans Qt 4. Cet abruti voulait donc écrire les settings dans ''/etc/xdg/'' (qui n'est en lecture seule pour l'utilisateur moyen). J'ai donc traduit les settings en Qt 4 pour avoir des settings locales à l'utilisateur. Sous Windows, elles sont stockées dans ''HKEY_LOCAL_USER/Software/LTAS-MCT'' et sous Unix, ''.conf/LTAS-MCT/Metafor.conf'' (fichier texte du genre ''.ini'') ===== Projet ===== ==== Windows ==== === Installation de Qt 4.2.1 === Le plus simple est d'installer les binaires de la version GPL que j'ai installé sur mon PC (sur mon serveur FTP - dark vador). Si vous voulez la recompiler vous même avec .NET, il faut la patcher. C'est expliqué [[http://arb.developpez.com/qt4/vc++/compilation/|ici]]. N'oubliez pas de changer votre ''QTDIR'' dans les variables d'environement. === Recompilation VTK === Il faut recompiler votre VTK avec le widget ''QVTK'' en version 4. Ca peut se faire en relancant ''cmake'' et en modifiant la version de Qt dans les options. Si ça marchait pas, videz la cache. === Projet .NET === Le projet a été largement modifié mais les modifs ne sont pas difficiles à faire grâce à ''qmake''. Une des conséquences directe du passage de Qt en version 4 a été l'obligation de faire de ''mtQt'' une DLL (au lieu d'une lib statique). Conceptuellement, c'est pas plus mal: ''mtQt'' est la couche Qt de l'interface graphique et ''mtViz'' est la couche VTK. De plus ''mtQt'' dépend de ''mtViz'' mais pas l'inverse. * Utilisez le nouveau fichier ''.pro'' pour générer un projet VC.NET avec ''qmake'' * Lancez le visual et éditez le projet à la main à 2 endroits: - //Dans Link/General// : Ignore Import Library = No (ça permet de faire dépendre d'autres projets de ''mtQt''). - //Dans Link/Input// : Changer ''Qt3Supportd4.lib''; ''QtGuid4.lib''; ''QtCored4.lib'' en ''Qt3Support4.lib''; ''QtGui4.lib''; ''QtCore4.lib'' (utilisation de la version release uniquement!) Pour le reste du projet: * ajouter à ''$(QTDIR)/include'' les rep suivants ''$(QTDIR)/include/QtCore'', ''$(QTDIR)/include/QtGui'', ''$(QTDIR)/include/Qt3Support'' * remplacer ''qt-mt3xx.lib'' par ''QtCore4.lib'', ''QtGui4.lib'', ''Qt3Support4.lib'' * définir les variables suivantes (je les ai mises dans mon ''meta_config.h'') #ifndef QT_DLL #define QT_LARGEFILE_SUPPORT #define QT_THREAD_SUPPORT #define QT_QT3SUPPORT_LIB #define QT3_SUPPORT #define QT_GUI_LIB #define QT_CORE_LIB #define QT_DLL #endif ==== Unix ==== J'ai recompilé VTK et Qt sur toutes les machines Unix et les makefiles ont été adaptés. Vu que Qt 4 ne compile pas sous Tru64, on perd la visu sur ''chinook''. Par contre, j'ai réussi à la compiler sur ''calimero''. On a donc la visu partout sauf sur ''chinook'' où il faut générer les makefiles sans l'option ''--with-gui''. Reste, de votre côté, à modifier vos profils (variables d'environement - pour ceux qui utilisent mes scripts, tout ça se trouve rangé dans ''~/profile.d/''). ^ ^ gaston ^ calimero ^ spirou / tsuno / fantasio ^ | ''QTDIR'' | ''/opt/qt4.2.1'' | ''/opt/qt4.2.1'' | ''/usr/local/qt4.2.1'' | | path VTK | ''/opt/vtk5.0.2'' | ''/opt/vtk5.0.2'' | ''/usr/local/vtk5.0.2'' | Vérifiez bien que tout est ok avant de lancer une compilation en testant: echo $QTDIR moc -v et vérifiez que votre ''LD_LIBRARY_PATH'' pointe bien vers le bon Qt (pour VTK, on utilise le ''rpath'', donc c'est pas nécessaire). ===== Screenshots ===== {{ commit:2006:qt4-debian.jpg |Metafor / Qt 4 sous calimero !}} ===== Fichiers ajoutés/supprimés ===== A gen4gui/gen4gui.cpp A gen4gui/gen4gui.h R gen4gui/gen4gui.ui.h A gen4gui/meshviewer.cpp A gen4gui/meshviewer.h R gen4gui/meshviewer.ui.h A mtQt/AxesWidget.cpp A mtQt/AxesWidget.h R mtQt/AxesWidget.ui.h A mtQt/BWinWidget.cpp A mtQt/BWinWidget.h R mtQt/BWinWidget.ui.h A mtQt/CameraWidget.cpp A mtQt/CameraWidget.h R mtQt/CameraWidget.ui.h A mtQt/CaptureWidget.cpp A mtQt/CaptureWidget.h R mtQt/CaptureWidget.ui.h A mtQt/ColorsWidget.cpp A mtQt/ColorsWidget.h R mtQt/ColorsWidget.ui.h A mtQt/Command.cpp A mtQt/Command.h A mtQt/CommandList.cpp A mtQt/CommandList.h A mtQt/CuttingWidget.cpp A mtQt/CuttingWidget.h R mtQt/CuttingWidget.ui.h A mtQt/ExtrusionWidget.cpp A mtQt/ExtrusionWidget.h R mtQt/ExtrusionWidget.ui.h A mtQt/GeneralWidget.cpp A mtQt/GeneralWidget.h R mtQt/GeneralWidget.ui.h A mtQt/GUIPythonInterpreter.cpp A mtQt/GUIPythonInterpreter.h A mtQt/LightsWidget.cpp A mtQt/LightsWidget.h R mtQt/LightsWidget.ui.h A mtQt/MetaforWidget.cpp A mtQt/MetaforWidget.h R mtQt/MetaforWidget.ui.h A mtQt/mtQt.h A mtQt/ObjectBrowser.cpp A mtQt/ObjectBrowser.h A mtQt/ObjectBrowserWidget.cpp A mtQt/ObjectBrowserWidget.h R mtQt/ObjectBrowserWidget.ui.h A mtQt/OptionDialog.cpp A mtQt/OptionDialog.h R mtQt/OptionDialog.ui.h A mtQt/PythonWindow.cpp A mtQt/PythonWindow.h R mtQt/PythonWindow.ui.h A mtQt/ShowHideWidget.cpp A mtQt/ShowHideWidget.h R mtQt/ShowHideWidget.ui.h A mtQt/SymmetryWidget.cpp A mtQt/SymmetryWidget.h R mtQt/SymmetryWidget.ui.h A mtQt/TabBaseWidget.cpp A mtQt/TabBaseWidget.h R mtQt/TabBaseWidget.ui R mtQt/TabBaseWidget.ui.h A mtQt/ValuesWidget.cpp A mtQt/ValuesWidget.h R mtQt/ValuesWidget.ui.h A mtQt/VizWin.cpp A mtQt/VizWin.h A mtQt/VizWinWidget.cpp A mtQt/VizWinWidget.h R mtQt/VizWinWidget.ui.h A mtQt/WiresWidget.cpp A mtQt/WiresWidget.h R mtQt/WiresWidget.ui.h A mtQt/XYPlotWidget.cpp A mtQt/XYPlotWidget.h R mtQt/XYPlotWidget.ui.h R mtViz/Command.cpp R mtViz/Command.h R mtViz/CommandList.cpp R mtViz/CommandList.h R mtViz/GUIPythonInterpreter.cpp R mtViz/GUIPythonInterpreter.h R mtViz/ObjectBrowser.cpp R mtViz/ObjectBrowser.h R mtViz/VizWin.cpp R mtViz/VizWin.h --- //[[r_boman@yahoo.fr|Romain BOMAN]] 2006/11/30 08:50//