Table of Contents
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 pourMTVIZ
,MTFEM
etMTGEO
. Bref, au lieu d'utiliserOEMTK::Vect3
, écrivezmtMath::Vect3
et au lieu deMTGEO_USING
, écrivezusing 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éeQt3Support
) - 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 dansHKEY_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é 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 avecqmake
- 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
enQt3Support4.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
parQtCore4.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
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
— Romain BOMAN 2006/11/30 08:50