← retour à la page principale du projet
Rapport du lundi 4 juillet 2005

Matin:
Ce week-end, j'ai testé CVS à l'extérieur du réseau ISIA-CMA, cela marche sans problème. Donc, le CVS est ouvert en lecture (& en écriture :-S) au monde entier.
Pour le forum, aucune solution purement Open Source permettant l'utilisation de Visual Studio ne se profile pour l'instant. Il est probable que quelqu'un en trouve une d'ici quelques mois, vu la communauté de programmeurs utilisant Qt, mais cette version est trop jeune pour que quelqu'un ait déjà trouvé une parade légale.
Tentative d'utilisation de Qt4 avec son Designer; je passe les détails, mais une fois de plus il faut y aller par petits pas, en essayer de deviner la méthode, les tutoriaux sont assez moyens.
Premiers problèmes avec les déclarations include (de type forward declaration)... C'est pour ce genre d'erreurs que je voulais utiliser VS...
À noter: Qt en général n'aime pas du tout les dossiers avec des espaces (en particulier le dossier parent de l'application).
Même si apparemment les exemples compilent, je n'arrive toujours pas à compiler mon propre exemple...
En fait, ils ne compilent pas du tout, les exe semblent être présents depuis le départ. Quand je les supprime & que je cherche à les recompiler, j'ai des erreurs diverses & variées...
Quand je prends le tutorial 1 (que j'arrive à compiler de moi-même en créant séparément le main.cpp), j'ai cette erreur:
C:\Qt\4.0.0\examples\tutorial\t1>make
mingw32-make -f Makefile.Debug all
mingw32-make[1]: Entering directory `C:/Qt/4.0.0/examples/tutorial/t1'
g++ -c -g -g -Wall -frtti -fexceptions -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"C:
/Qt/4.0.0/include/QtGui" -I"C:/Qt/4.0.0/include/QtCore" -I"C:/Qt/4.0.0/include" -I"C:/Qt/4.0.0/include/ActiveQt" -I"tmp\moc\debug_shared" -I"." -I"."
-I"C:\Qt\4.0.0\mkspecs\win32-g++" -o tmp\obj\debug_shared\main.o main.cpp
g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,windows -o "debug\t1.exe" tmp\obj\debu
g_shared\main.o  -L"C:\Qt\4.0.0\lib" -L"C:\Qt\4.0.0\lib" -lmingw32 -lqtmaind -lQtCored4 -lQtGuid4
C:\Program Files\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot open output file debug\t1.exe: No such file or directory
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\t1.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.0.0/examples/tutorial/t1'
mingw32-make: *** [debug-all] Error 2
Je précise que j'ai supprimé les dossiers debug & release au préalable, & que j'ai fait un make clean.
Bon, quand je suis gentil, & que je lui crée un dossier debug & un dossier release, il veut bien me donner une autre erreur:
C:\Qt\4.0.0\examples\tutorial\t1>make
mingw32-make -f Makefile.Debug all
mingw32-make[1]: Entering directory `C:/Qt/4.0.0/examples/tutorial/t1'
g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,windows -o "debug\t1.exe" tmp\obj\debu
g_shared\main.o  -L"C:\Qt\4.0.0\lib" -L"C:\Qt\4.0.0\lib" -lmingw32 -lqtmaind -lQtCored4 -lQtGuid4
mingw32-make[1]: Leaving directory `C:/Qt/4.0.0/examples/tutorial/t1'
mingw32-make -f Makefile.Release all
mingw32-make[1]: Entering directory `C:/Qt/4.0.0/examples/tutorial/t1'
g++ -c -O2 -O2 -Wall -frtti -fexceptions -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_THREAD_SUPPORT -DQT_N
EEDS_QMAIN -I"C:/Qt/4.0.0/include/QtGui" -I"C:/Qt/4.0.0/include/QtCore" -I"C:/Qt/4.0.0/include" -I"C:/Qt/4.0.0/include/ActiveQt" -I"tmp\moc\release_sh
ared" -I"." -I"." -I"C:\Qt\4.0.0\mkspecs\win32-g++" -o tmp\obj\release_shared\main.o main.cpp
g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-s -Wl,-subsystem,windows -o "release\t1.e
xe" tmp\obj\release_shared\main.o  -L"C:\Qt\4.0.0\lib" -L"C:\Qt\4.0.0\lib" -lmingw32 -lqtmain -lQtCore4 -lQtGui4
C:\Program Files\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lQtGui4
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\t1.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.0.0/examples/tutorial/t1'
mingw32-make: *** [release-all] Error 2
Je ne sais pas si vous vous souvenez, mais j'ai déjà eu cette erreur (cf  le rapport du 29 juin).
Cependant, il me crée néanmoins le fichier exe! Bon, OK.
Apparemment, tous les exemples me sortent la même erreur. Certains donnent l'exe, d'autres non.
Notons quand même que la compilation d'un projet Qt est tout de même plutôt longue (parfous jusqu'à 1 minute sur mon P4 2,6GHz).
Pour l'instant, les seuls exemples qui refusent de donner l'exe après la compilation sont les exemples OpenGL; ils réclament cannot find -lQtOpenGLd4.
Attention, pour les exemples, ne pas chercher à faire qmake -project pour écraser le .pro, cela donne des conséquences désastreuses.
Bon, ça ne me dit toujours pas comment utiliser un fichier .ui, mais après tout, on verra ça un autre jour.
Séb' n'a pas le même problème que moi. J'ai essayé en utilisant le Qt 4.0.0 Command Prompt, ça ne marche pas plus...
J'ai essayé aussi Qt 4.0.0 (Build Debug Libraries), qui me dit:
Setting up a MinGW/Qt only environment...
-- QTDIR set to C:\Qt\4.0.0
-- PATH set to C:\Qt\4.0.0\bin
-- Adding C:\Program Files\MinGW\bin to PATH
-- Adding C:\WINDOWS\System32 to PATH
-- QMAKESPEC set to win32-g++
This will configure and compile qt in debug.
The release libraries will not be recompiled.
Appuyez sur une touche pour continuer...
Mais apparemment, c'est aussi long que si j'avais envie de recompiler mon Windows! :-)
Donc, dès cet après-m', désinstallation/réinstallation totale!

Après-midi:
Désinstallation totale de Qt+MinGW. Apparemment, c'était la saturation des serveurs de TrollTech qui bloquait auparavent le téléchargement automatique de MinGW. Aujourd'hui, tout se fait automatiquement à partir du programme d'installation de Qt.
Tout semble marcher à merveille. Je conseille pour ceux qui voudraient travailler avec Qt de bidouiller leurs variables d'environnement (Panneau de configuration->Système->onglet Avancé->bouton Variables d'environnement; modifier le PATH, en se calcant sur le fichier C:\Qt\4.0.0\bin\qtvars.bat) pour ne pas à avoir à toujours utiliser le Qt 4.0.0 Command Prompt; l'utilisation du PowerToy Open Command Window Here (ouvre une invite de commande à partir du menu contextuel) est aussi un plus appréciable. À noter: je n'ai pas utilisé configure.exe cette fois-ci (est-ce parce que je l'avais déjà utilisé auparavent?).
Bon, retentage de création d'un projet vide juste avec un petit .ui basique:
C:\Documents and Settings\Gilles\My Documents\Visual Studio 2005\Projects\justeUI>dir
04/07/2005  10:52               514 imagedialog.ui

C:\Documents and Settings\Gilles\My Documents\Visual Studio 2005\Projects\justeUI>qmake -project

C:\Documents and Settings\Gilles\My Documents\Visual Studio 2005\Projects\justeUI>dir
04/07/2005  10:52               514 imagedialog.ui
04/07/2005  14:43               305 justeUI.pro

C:\Documents and Settings\Gilles\My Documents\Visual Studio 2005\Projects\justeUI>qmake

C:\Documents and Settings\Gilles\My Documents\Visual Studio 2005\Projects\justeUI>dir
04/07/2005  14:43    <REP>          debug
04/07/2005  10:52               514 imagedialog.ui
04/07/2005  14:43               305 justeUI.pro
04/07/2005  14:43             4 614 Makefile
04/07/2005  14:43             4 246 Makefile.Debug
04/07/2005  14:43             4 292 Makefile.Release
04/07/2005  14:43    <REP>          release

C:\Documents and Settings\Gilles\My Documents\Visual Studio 2005\Projects\justeUI>make
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Documents and Settings/Gilles/My Documents/Visual Studio 2005/Projects/justeUI'
g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-s -Wl,-subsystem,windows -o "release\just
eUI.exe"   -L"C:\Qt\4.0.0\lib" -lmingw32 -lqtmain -lQtCore4 -lQtGui4
C:\Qt\4.0.0\lib/libqtmain.a(qtmain_win.o)(.text+0x26):qtmain_win.cpp: undefined reference to `__gxx_personality_sj0'
C:\Qt\4.0.0\lib/libqtmain.a(qtmain_win.o)(.text+0x1f7):qtmain_win.cpp: undefined reference to `qMain(int, char**)'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\justeUI.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Documents and Settings/Gilles/My Documents/Visual Studio 2005/Projects/justeUI'
mingw32-make: *** [release] Error 2
Le contenu du justeUI.pro (généré automatiquement par qmake -project) est spartiate:
TEMPLATE = app
DEPENDPATH += .
INCLUDEPATH += .
FORMS += imagedialog.ui
Bon, comprends pas. Ça doit être normal, je ne pense pas qu'un fichier .ui soit fEssai extrait du tutorial avec un main.cpp...
Toujours les mêmes erreurs que ce matin:
C:\Documents and Settings\Gilles\My Documents\Visual Studio 2005\Projects\UIetCPP>make
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Documents and Settings/Gilles/My Documents/Visual Studio 2005/Projects/UIetCPP'
g++ -c -O2 -O2 -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_GUI_LIB
C:\Documents and Settings\Gilles\My Documents\Visual Studio 2005\Projects\UIetCPP>make
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Documents and Settings/Gilles/My Documents/Visual Studio 2005/Projects/UIetCPP'
g++ -c -O2 -O2 -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_THREAD_SUPPORT -DQT_N
EEDS_QMAIN -I"C:/Qt/4.0.0/include/QtGui" -I"C:/Qt/4.0.0/include/QtCore" -I"C:/Qt/4.0.0/include" -I"C:/Qt/4.0.0/include/ActiveQt" -I"release" -I"." -I"
C:\Qt\4.0.0\mkspecs\win32-g++" -o release\main.o main.cpp
main.cpp: In function `int qMain(int, char**)':
main.cpp:6: error: invalid use of undefined type `struct QDialog'
C:/Qt/4.0.0/include/QtGui/../../src/gui/kernel/qwindowdefs.h:34: error: forward declaration of `struct QDialog'
main.cpp:7: error: `ImageDialog' is not a member of `Ui'
main.cpp:7: error: expected `;' before "ui"
main.cpp:8: error: `ui' undeclared (first use this function)
main.cpp:8: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:10: error: invalid use of undefined type `struct QDialog'
C:/Qt/4.0.0/include/QtGui/../../src/gui/kernel/qwindowdefs.h:34: error: forward declaration of `struct QDialog'
mingw32-make[1]: *** [release\main.o] Error 1
mingw32-make[1]: Leaving directory `C:/Documents and Settings/Gilles/My Documents/Visual Studio 2005/Projects/UIetCPP'
mingw32-make: *** [release] Error 2
Bon, & si je prenais ce fichier tout bête?
    #include <QApplication>
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QDialog *window = new QDialog;
        window->show();
        return app.exec();
    }
Résultat:
C:\Documents and Settings\Gilles\My Documents\Visual Studio 2005\Projects\justCPP>make
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Documents and Settings/Gilles/My Documents/Visual Studio 2005/Projects/justCPP'
g++ -c -O2 -O2 -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_THREAD_SUPPORT -DQT_N
EEDS_QMAIN -I"C:/Qt/4.0.0/include/QtGui" -I"C:/Qt/4.0.0/include/QtCore" -I"C:/Qt/4.0.0/include" -I"." -I"C:/Qt/4.0.0/include/ActiveQt" -I"release" -I"
." -I"C:\Qt\4.0.0\mkspecs\win32-g++" -o release\main.o main.cpp
main.cpp: In function `int qMain(int, char**)':
main.cpp:6: error: invalid use of undefined type `struct QDialog'
C:/Qt/4.0.0/include/QtGui/../../src/gui/kernel/qwindowdefs.h:34: error: forward declaration of `struct QDialog'
main.cpp:10: error: invalid use of undefined type `struct QDialog'
C:/Qt/4.0.0/include/QtGui/../../src/gui/kernel/qwindowdefs.h:34: error: forward declaration of `struct QDialog'
mingw32-make[1]: *** [release\main.o] Error 1
mingw32-make[1]: Leaving directory `C:/Documents and Settings/Gilles/My Documents/Visual Studio 2005/Projects/justCPP'
mingw32-make: *** [release] Error 2
Bon, ça devient inquiétant...
Grrr... 3 fois Grrrr, leur exemple était plus que miteux, il faut corriger:
    #include "ui_imagedialog.h"
    #include <QApplication>
    #include <QDialog>

    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QDialog *window = new QDialog;
        Ui::Dialog ui;
        ui.setupUi(window);

        window->show();
        return app.exec();
    }
Maintenant, ça tourne. Attention à bien créer une boîte de dialogue & non pas une fenêtre (Window).
Revenons à SoQt. J'ai essayé maintes fois de faire tourner un programme basique sous Windows... impossible... que ce soit avec Dev-C++ ou VS (VS semble mieux s'en tirer; néanmoins, certains fichiers .h de Coin semblent demander d'autres fichiers .h inexistants; certains sont trouvés après avoir ajouté quelques dossiers dans le include, d'autres n'existent tout simplement pas sur le disque dur). J'ai donc pensé ne pas avoir terminé proprement mon installation. Il est possible de créer les librairies avec VS, mais j'ai le même genre de problème (des fichiers .h font appel à d'autres fichiers .h inexistants). Pour arriver à ce résultat, il faut bidouiller les propriétés du projet (en s'inspirant de http://www.coin3d.org/windows/tutorial/ & des propriétés du fichier C:\Program Files\Coin3D\build\soqt1.dsp).
J'ai donc tenté à partir du CVS, qui me propose de tout installer via le makefile (que je ne trouve pas); & que si j'ai un problème, prière d'utiliser les librairies précompilées (qui je le rappelle, ne sont pas censées exister).
En plus de soqt-v1.0.3a-install.exe, j'installe Coin3D_2.3.0-0.exe. Il contient d'autres fichiers .h que je n'avais pas.
Je me suis fait avoir: l'ancienne version travaille avec une variable d'environnement COIN3DDIR, la nouvelle avec COINDIR... :-\ donc, forcément, ça marche moyen...
Pour une raison incompréhensible, même après un rebbot, VS refuse dans ce cas précis de lire dans un répertoire que je lui ai mis dans sa liste d'includes. Je remplace donc la variable d'environnement à laquelle il fait référence par sa valeur réelle.
Il reste un qobject.h que VS ne trouve pas. Un dernier include... On compile... Aïe: 102 erreurs (& un warning, mais bon, on n'en est plus à un warning près).
Quand à mon petit fichier de test: 9 warnings & 1 erreur... Peut-être un problème de DLL qui ne correspond pas...
error C2665: 'SoQt::init' : none of the 3 overloads could convert all the argument types
c:\documents and settings\gilles\my documents\visual studio 2005\projects\soqtvs\soqtvs\soqtvs\soqtvs.cpp    15
J'ai déjà rencontré ce genre d'erreur. Il faudra que je voie à quelles DLL &/ou libs je fais référence.

À effectuer prochainement:

Valid XHTML 1.0 Transitional