Profil

  • Jbx
  • le blog hxcjbx
  • Homme
  • Java UML Qt Hordes OpenGL
  • Développeur C++/Qt/OpenGL, secteur Aérospacial-Défense.

Intégration de Ogre dans QT avec Code::Blocks

Introduction

Ce tutoriel a pour but de compiler des programmes intégrant à la fois QT et Ogre sous l'environnement de développement Code::Blocks.

Tout d'abord il faut savoir que C::B ne gère pas nativement QT. En effet le principe des signaux/ slots n'est pas propre au C++, et nécessite une compilation particulière faisant intervenir qmake.

La compilation s'effectuera donc manuellement en ligne de commande.

Je commencerais donc par l'utilisation de QT avec Code::Blocks.

Ensuite j'expliquerais comment ajouter les librairies Ogre afin de produire un exécutable se servant des deux librairies. L'exemple de code utilisé et celui fournit et commenté sur le site developpez.com, que vous trouverez ici. Je remercie Denys Bulant pour son tutoriel très complet, les infos sur le sujet étant très rare sur le net.


Nécessaire de survie

Code::Blocks et MinGW

Afin de mener à bien ce tutoriel, il vous faudra bien sur disposer d'une installation de Code::Blocks. Je vous conseille la dernière version en date intégrant MinGW , la 8.02

Il vous faudra également installer les dernières Nightly Builds, que vous trouverez sur le forum de C::B, normalement ici

Des procédures d'installation des Nightly étant disponible partout sur le web, et étant assez aisées, je n'en parlerais pas sur ce tuto.


QT

Vous trouvez la dernière version de QT GPL pour windows ici


Ogre

Il vous faudra le package OGRE 1.6.1 SDK for Code::Blocks + MinGW C++ Toolbox que vous trouverez sur cette page


Code

L'exemple est celui tiré du tutoriel disponible sur developpez.com et écrit par Denis Bulant. La source est disponible en bas de page


Etape 1 : QT et Code::Blocks

Comme dit plus haut, Code::Blocks et QT ne font pas forcément bon ménage. En effet la compilation d'un projet QT nécessite qmake avant d'appeler un compilateur tel que gcc.

C'est du au principe des slots / signaux qui est propre ici à la librairie QT.


Malgré tout lorsqu'on crée un nouveau projet sous Code::Blocks, on a la possibilité de créer un « QT4 project ». On suit les étapes pour configurer ce projet et on arrive devant un programme minimaliste :


#include <QApplication>

#include <QFont>

#include <QPushButton>


int main(int argc, char* argv[])

{

QApplication app(argc, argv);

QPushButton quit("Quit");

quit.resize(75, 30);

quit.setFont(QFont("Times", 18, QFont::Bold));

QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));

quit.show();

return app.exec();

}


On peut ainsi compiler ce projet et tout semble marcher parfaitement... mais il s'agit d'un leurre. En effet ici le projet utilise des slots et signaux qui sont déjà définis dans la librairie QT. Or vous vous rendrez rapidement compte qu'un programmeur utilisant QT en viens tôt ou tard à définir ses propres slots voir même ses propres signaux. A ce moment là, Code::Blocks donnera ses limites. Vous obtiendrez alors une erreur du type « undefined reference to `vtable for ... »

Il existe des plug-ins pour Code::Blocks sensé résoudre ce problème, par exemple QT Workbench. Malheureusement la documentation est inexistante, et je n'ai personnellement jamais réussit à l'utiliser. J'ai donc choisit de compiler mes projets à la main, en attendant de trouver une solution viable.


Afin d'éviter de jongler avec les variables d'environnements, le mieux est d'utiliser le « Qt command prompt » fournit avec le SDK de QT.

Vous le trouverez dans Démarrer => Programmes => Qt SDK by Nokia v2009.01 (open source) => QT command prompt.


Pour compiler un projet réalisé sous C::B, il suffit alors de se rendre dans le répertoire de ce projet, puis d'effectuer la suite de commandes suivantes :


qmake -project

qmake

make


A savoir que « qmake -project » n'est nécessaire qu'a l'ajout d'un nouveau fichier dans le projet.

Également, que make par défaut compile en mode Debug. Pour obtenir un programme release, il suffira de d'utiliser la commande make release .


Etape 2 : QT, Ogre et Code::Blocks

Nous voilà dans le vif du sujet. Pour être sur de ne pas en perdre en route je vais expliquer de A à Z comment compiler un projet  ( celui téléchargeable plus haut ) écrit sous C::B.


Tout d'abord, commencer par ouvrir un projet de type Ogre sous Code::Blocks. Supprimer le main ( assurer vous qu'il n'est plus dans le répertoire du projet ). Imaginons que le répertoire contenant le projet soit « C:\projects\QT_Ogre ».

Ogre serrait lui dans C:\OgreSDK.


On commence par ajouter les fichiers main.cpp, ogrewidget.h, ogrewidget.cpp ainsi que le dossier media dans le dossier du projet en cours. On peut alors ouvrir les fichiers sources dans l'éditeur.


Ensuite il faut se rendre dans le repertoire du projet, en l'occurence C:\projects\QT_Ogre


On tape alors « qmake -project » . Un fichier .pro est alors généré. Néanmoins celui ci ne contient pas les liens vers la librairie Ogre. Il faut donc l'éditer.


Le fichier doit ressembler à ça :


######################################################################

# Automatically generated by qmake (2.01a) lun. 30. mars 04:50:27 2009

######################################################################


TEMPLATE = app

TARGET =

DEPENDPATH += .

INCLUDEPATH += .

# Input

HEADERS += ogrewidget.h

SOURCES += main.cpp ogrewidget.cpp


Pour utiliser des librairies externes, on doit ajouter à notre .pro des lignes du style :


INCLUDEPATH += ton/path/vers/include
LIBS += -Lpath/to/lib -lmalib


Dans notre cas, le fichier .pro deviens


######################################################################

# Automatically generated by qmake (2.01a) dim. 29. mars 22:08:54 2009

######################################################################


TEMPLATE = app

TARGET =

DEPENDPATH += .

INCLUDEPATH += E:\OgreSDK\include

INCLUDEPATH += E:\OgreSDK\samples\include

LIBS += -LC:\OgreSDK\lib -LC:\OgreSDK\bin\debug -lOgreMain_d -lOIS_d

# Input

HEADERS += ogrewidget.h

SOURCES += main.cpp ogrewidget.cpp


Dans le cas d'une compilation en mode debug, sinon pour une release ou aura :


######################################################################

# Automatically generated by qmake (2.01a) dim. 29. mars 22:08:54 2009

######################################################################


TEMPLATE = app

TARGET =

DEPENDPATH += .

INCLUDEPATH += E:\OgreSDK\include

INCLUDEPATH += E:\OgreSDK\samples\include

LIBS += -LC:\OgreSDK\lib -LC:\OgreSDK\bin\release -lOgreMain -lOIS

# Input

HEADERS += ogrewidget.h

SOURCES += main.cpp ogrewidget.cpp


On peut alors compiler le projet normalement :


qmake

make


Normalement vous ne devriez avoir aucune erreur de compilation, et obtenir votre exécutable.


Pour qu'il puisse trouver tout les modules nécessaires, il suffit alors de récupérer les dll ainsi que les fichiers de config ( .cfg ) disponible dans C:\OgreSDK\bin\debug ou C:\OgreSDK\bin\release.

Il vous faudra peut être aussi ajouter les dll propre à QT, en l'occurence Qtcore4.dll et Qtgui4.dll ( QtCore4d.dll et Qtgui4d.dll en debug ).


Vous pouvez alors exécuter votre programme compilé :




Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus