187
La FAQ Qt Date de publication : 12/09/2006 Dernière mise à jour : 02/01/2010 La troisième version de Qt a été largement améliorée avec la sortie de la dernière version majeure : Qt 4. Qt est maintenant disponible sur les trois plateformes traditionnelles sous triple licences. Ce framework a été retravaillé en profondeur, bien des objets ont été transformés, supprimés ou ajoutés, afin de permettre à l'utilisateur de la bibliothèque de profiter pleinement de la puissance offerte par Qt. Ici, l'équipe rédactionnelle souhaiterait remercier tous ceux qui ont contribué à cette FAQ : Alp, Aurélien Régat-Barrel, dourouc05, Gulish, haraendil, Ikipou, IrmatDen, johnlamericain, Kinji1, LeGars, LittleWhite, Mac&Cheese, Matthieu Brucher, nouknouk, Nykoo, Niak74, Shugo78, superjaja, yan, zAmnellL.

FAQ-Qt

Embed Size (px)

Citation preview

La FAQ QtDate de publication : 12/09/2006 Dernire mise jour : 02/01/2010

La troisime version de Qt a t largement amliore avec la sortie de la dernire version majeure : Qt 4. Qt est maintenant disponible sur les trois plateformes traditionnelles sous triple licences. Ce framework a t retravaill en profondeur, bien des objets ont t transforms, supprims ou ajouts, afin de permettre l'utilisateur de la bibliothque de profiter pleinement de la puissance offerte par Qt. Ici, l'quipe rdactionnelle souhaiterait remercier tous ceux qui ont contribu cette FAQ : Alp, Aurlien Rgat-Barrel, dourouc05, Gulish, haraendil, Ikipou, IrmatDen, johnlamericain, Kinji1, LeGars, LittleWhite, Mac&Cheese, Matthieu Brucher, nouknouk, Nykoo, Niak74, Shugo78, superjaja, yan, zAmnellL.

Ont contribu cette FAQ :

Jonathan Courtois - Niak74 - LittleWhite - nouknouk - LeGars Thibaut Cuvelier (Site web) ( Blog ) - Matthieu Brucher (http:// miles.developpez.com/) ( Blog ) - Alp Mestan (Site perso de Alp) ( Blog ) - Yan Verdavaine (Site web) - Denys Bulant (Tutoriels Qt) - Shugo78 - Nykoo - mac&cheese - Benjamin Poulain - Franois Jaffr - Kinj1 (Site web) - gulish - haraelendil - Louis du Verdier - Aurelien.Regat-Barrel (Site web) -

La FAQ Qt

1. Introduction Qt4 (5) ............................................................................................................................................................... 4 2. Gnralits (10) ......................................................................................................................................................................... 7 2.1. Mmoire (3) .................................................................................................................................................................... 10 2.2. Dploiement (1) .............................................................................................................................................................. 13 2.3. Contribuer (2) ................................................................................................................................................................. 14 3. Le contenu de Qt4 (2) ............................................................................................................................................................. 16 4. La compilation (10) ................................................................................................................................................................. 18 4.1. Gnralits sur la compilation (8) ..................................................................................................................................19 4.2. qmake (2) ........................................................................................................................................................................ 25 5. QtCore (80) ..............................................................................................................................................................................26 5.1. QObject (5) ..................................................................................................................................................................... 38 5.2. QString (10) .................................................................................................................................................................... 42 5.3. Thread (9) ....................................................................................................................................................................... 48 5.4. Fichiers et rpertoires (22) ............................................................................................................................................. 55 5.4.1. Oprations de base (10) .........................................................................................................................................56 5.4.2. Lecture et criture (3) ............................................................................................................................................64 5.4.3. Rcuprer des informations (9) ............................................................................................................................. 67 5.5. Signaux et slots (9) .........................................................................................................................................................72 5.6. Plug-ins (2) ..................................................................................................................................................................... 83 5.7. Temps (6) ........................................................................................................................................................................85 5.8. vnements (1) ............................................................................................................................................................... 91 5.9. Ressources (1) .................................................................................................................................................................93 6. QtGui (38) ................................................................................................................................................................................95 6.1. Animations (2) .............................................................................................................................................................. 111 6.2. Graphics View (2) ........................................................................................................................................................ 117 6.3. Model View (4) ............................................................................................................................................................ 119 6.4. Assistants (7) ................................................................................................................................................................ 123 6.5. Style (5) ........................................................................................................................................................................ 129 6.6. Icnes (2) ...................................................................................................................................................................... 135 7. QtXml (4) ...............................................................................................................................................................................136 7.1. DOM (2) ....................................................................................................................................................................... 137 7.2. SAX (2) .........................................................................................................................................................................141 8. QNetwork (15) .......................................................................................................................................................................145 8.1. QHttp (5) .......................................................................................................................................................................149 8.2. Sockets (2) .................................................................................................................................................................... 158 8.3. Gestionnaire d'accs (6) ................................................................................................................................................160 9. Phonon (6) ............................................................................................................................................................................. 164 9.1. Gnralits (4) ...............................................................................................................................................................165 9.2. Backends (2) ................................................................................................................................................................. 167 10. Intgration avec d'autres librairies (4) .................................................................................................................................168 10.1. boost.signals (4) .......................................................................................................................................................... 169 11. EDI (5) ................................................................................................................................................................................. 173 11.1. QtCreator (4) ...............................................................................................................................................................174 12. Les bibliothques complmentaires (21) .............................................................................................................................176 12.1. Qwt (13) ......................................................................................................................................................................177 12.2. QCA (7) ...................................................................................................................................................................... 183

-3Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > Introduction Qt4 Quelle est la licence d'utilisation de Qt4 ?Auteurs : Matthieu Brucher , Yan Verdavaine , Benjamin Poulain , Depuis la version majeure 4.5, Qt4 est distribu sous trois licences :

-4Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

commercial : vous permet de faire ce que vous voulez avec le code de Qt et votre code. GPL V3 : tout code dvelopp avec la version GPL de Qt doit aussi tre GPL. Tout le code doit donc tre accessible aux utilisateurs de l'application. C'est la licence gnralement choisie pour les projets Open Source. LGPL v2.1 : similaire la GPL, mais si Qt est li dynamiquement votre application, le code de votre application peut tre ferm/propritaire. Les modifications sur les sources de Qt seront obligatoirement LGPL. Avec cette licence, l'utilisateur doit avoir la possibilit de remplacer Qt par sa propre version. Cela n'est gnralement un problme que lorsque Qt est intgr directement dans un appareil (tlvision, GPS, etc.).

lien : lien : lien :

Les licences Qt sur le site de QtSoftware GPL LGPL

O trouver la documentation de Qt ?Auteurs : Alp Mestan , Nokia propose une documentation plus qu'exhaustive pour chacune des versions de Qt. Le sommaire de toutes ces documentations se trouve ici : Online Reference Documentation

De plus, chaque version de Qt est distribue avec un outil permettant de parcourir la documentation : Qt Assistant. La version de la documentation accessible avec Qt Assistant correspond la version de Qt avec laquelle il a t distribu.

Que sont les Qt Quarterly ?Auteurs : Thibaut Cuvelier , Qt Quarterly est une revue lectronique trimestrielle propose par Nokia destination des dveloppeurs et utilisateurs de Qt. Vous pouvez retrouver les articles sur le site de Nokia.

La rdaction Qt de Dveloppez vous propose la traduction de certains articles, leur nombre augmentera rgulirement. Ces articles sont crits par des professionels de Qt, qui ont de l'exprience avec ce framework : ces sommits nous font part de leur exprience dans le domaine, pour simplifier le dveloppement et pour viter des erreurs courantes.

Quels sont les chemins des en-ttes inclure lors de la compilation ?Auteurs : Matthieu Brucher , Alp Mestan , Benjamin Poulain , Tout d'abord, Qt4 propose 2 types d'en-ttes : les en-ttes standards avec un .h comme extension, et les autres, sans extension. Pour que la compilation se droule correctement, il faut que le chemin vers les en-ttes de Qt soit inclus dans la liste des dossiers parcourir pour les en-ttes, mais aussi chacun des sous-dossiers des bibliothques que vous utiliserez. Enfin, il faut savoir que pour chaque classe de Qt, il existe un en tte qui porte le mme nom que la classe. Si par exemple vous utilisez QString, il faut un include de ce genre.

#include

-5Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Par dfaut, les fichiers d'en-tte se trouvent dans les frameworks sous Mac OS X (/Library/Frameworks), dans les includes sous Linux (gnralement dans /usr/include/qt4), et dans le repertoire o Qt est install sous Windows (gnralement dans C:\Qt\4.x.x\include). Pour compiler une application Qt, vous pouvez utiliser qmake, qui dfinira ces chemins pour vous.

Comment dbuter avec Qt ?Auteurs : Benjamin Poulain , Qt est un framework orient objet qui se base sur le langage C++. Pour bien profiter de Qt, il vaut donc mieux commencer par apprendre les bases de C++ et de la programmation oriente objet. Sur ces bases, un bon dpart est de lire (et appliquer !) les tutoriels Dbuter dans la cration d'interfaces graphiques avec Qt 4 et Carnet d'adresses. Qt introduit de nombreux concepts pour faciliter la programmation graphique, et lire le tutoriel peut vous tre utile, mme si vous avez dj utilis une bibliothque graphique. Pour essayer les exemples du tutoriel, il faut un environnement de dveloppement configur pour utiliser Qt. Le plus simple pour commencer est d'utiliser le Qt SDK (Qt avec un EDI, QtCreator, et un compilateur, MinGW) ou d'installer Qt et d'utiliser Monkey Studio ou QDevelop. Lorsque vous avez acquis les concepts du tutoriel, vous pouvez continuer avec les exemples de Qt. Chaque version de Qt est distribue avec un logiciel nomm QtDemo, celui-ci est bourr d'exemple avec leur code source.

lien : lien :

Tutoriel : installez Qt sur Mac avec Xcode ou QtCreator Tutoriel : installez Qt 4.4.3 facilement et compilez vos applications

-6Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > Gnralits Est-ce compliqu d'utiliser Qt 4 ?Auteurs : Alp Mestan , En ralit, utiliser Qt est plus simple que ce que l'on pense. En effet, le code suivant affiche un bouton qui ferme l'application lorsque l'on clique dessus, et pourtant il ne fait que 13 lignes.// Ncessaire pour crer une application avec Qt #include // Ncessaire pour pouvoir crer un bouton #include // La fonction main() habituelle int main(int argc, char ** argv) { // Qt rcupre les arguments passs au programme QApplication app(argc, argv); // on cre notre bouton, intitul "Hello World" QPushButton quit("Hello World!"); // on le redimensionne quit.resize(300, 40); // on change la police et la taille quit.setFont(QFont("Arial", 18, QFont::Bold)); // on explique Qt que l'application doit se terminer lors du clic //sur le bouton cr prcdemment QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); // on affiche le bouton quit.show(); // on laisse Qt grer le code de retour du programme return app.exec(); }

Comme vous pouvez le voir, il est trs simple de grer ses composants. Pour en dcouvrir plus, il est bon de consulter la documentation et les exemples de Nokia, ainsi que les tutoriels prsents sur la rubrique Qt de Dveloppez.com.

Que faudrait il connaitre au minimum du C++ pour bien utiliser Qt ?Auteurs : Yan Verdavaine , Alp Mestan , Denys Bulant , Aurelien.Regat-Barrel , Benjamin Poulain , Thibaut Cuvelier , Pour vous aider, voici un petit rcapitulatif des notions importantes du C++ utilises dans Qt. Bien sr, tout ceci n'est qu'indicatif, et peut tre discut. Fondements Programmation oriente objet en C++ (dclaration d'une classe ou structure, hritage, appel de fonction membre...) ; Diffrence entre mmoire statique et dynamique (connatre la dure de vie des objets instancis, et mme mieux : la matriser) ; Polymorphisme et surcharge d'oprateur ; Cast (transformation d'une pointeur sur QObject ou QWidget vers le type rel de l'objet) ; Templates (conteneurs de Qt, principalement) ; Anglais (pour parcourir la documentation officielle). De prfrence Operateurs binaires ~ ! | & (paramtrer certaines fonctionnalits grce aux drapeaux, mme si Qt fournit la classe QFlags pour simplifier ce traitement) ;

-7Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Itrateurs, en C++ ou en Java (parcours avanc sur des lments). Qt fournit la mthode foreach, qui vite l'utilisation des itrateurs, suffisante dans la plupart des cas.

Comment optimiser avant distribution ?Auteurs : Benjamin Poulain , Avant de distribuer/dployer une application, il faut gnralement l'optimiser. Un application plus rapide permet de : Avoir un avantage sur les applications concurrentes (en particulier les applications web) ; Diminuer la consommation nergtique (ce qui est particulirement important si Qt est utilis sur un tlphone).

La premire tape pour optimiser est de faire tourner l'application dans un profiler. Un profiler fait des statistiques de l'utilisation du code et permet de trouver les branches et fonctions qui prennent le plus de temps l'excution. Il existe de nombreux profiler pour C++ : Valgrind avec callgrind (Linux), Intel VTune (Linux et Windows), Instruments (XCode, Mac OS X), Visual Studio Profiler (Windows). La seconde tape est d'activer les optimisations la compilation. Ces optimisations sont valables pour Qt comme pour l'application, il faut donc recompiler les deux et pas seulement l'application. Il faut recompiler en mode release pour que le code de dbogage (QDebug, Q_ASSERT) ne soit pas inclus, ne pas inclure les symboles de dbogage (retirer l'option -g), et activer les optimisations (option -O2). Si le compilateur le permet, l'utilisation de PGO (Profile-Guided Optimization) permet d'amliorer encore les performances. Finalement, avec une licence commerciale ou pour un projet open-source, compiler statiquement amliore aussi les performances. lien : Quand et comment raliser une compilation "statique"?

Comment connatre l'OS de l'utilisateur ?Auteurs : Louis du Verdier , Qt permet travers toutes ses fonctionnalits de pouvoir connatre le nom de l'OS de l'utilisateur du programme. Si quelqu'un laisse ses sources disponibilit publique, il pourra donc par exemple aviser pour l'ouverture d'un fichier par l'explorateur pour tel type d'ouverture pour Mac et tel autre type pour les autres OS (car ce type de chose est diffrent chez Mac, ce qui montre l'intrt de la rcupration du nom du systme d'exploitation sur lequel a t lanc le programme)... La documentation regorge d'informations permettant de trouver ce nom. Par exemple, pour Mac, on y trouve Q_WS_MAC et pour Windows, on y trouve Q_WS_WIN. Mais comment exploiter ces rsultats ? Eh bien, une condition de ce type fera parfaitement l'affaire !

#if defined(Q_WS_WIN) // ... #endif

Dans ce code, on dit : "Si Q_WS_WIN est dfini, ..." ou tout simplement : "Si on tourne sous Windows actuellement, ...". Voici un exemple vous permettant de rcuprer l'OS utilis et de l'indiquer l'utilisateur dans une bote de dialogue.

-8Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

#include #include class FenPrincipale : public QMainWindow { Q_OBJECT public: FenPrincipale() { #if defined(Q_WS_WIN) // Si on est sous Windows QMessageBox::information(NULL, "Nom de l'OS", "Vous tournez #endif #if defined(Q_WS_QWS) // Si on est sous Embedded Linux QMessageBox::information(NULL, "Nom de l'OS", "Vous tournez #endif #if defined(Q_WS_MAC) // Si on est sous Mac QMessageBox::information(NULL, "Nom de l'OS", "Vous tournez #endif #if defined(Q_WS_X11) // Si on est sous X11 QMessageBox::information(NULL, "Nom de l'OS", "Vous tournez #endif } }; #include "main.moc" int main(int argc, char *argv[]) { QApplication app(argc, argv); FenPrincipale fenetre; fenetre.show(); exit(0); }

sous Windows !");

sous Embedded Linux !");

sous Mac !");

sous X11 !");

-9Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > Gnralits > Mmoire Comment Qt optimise-t-il les copies ?Auteurs : Yan Verdavaine , Qt est bas sur une smantique de copie. C'est dire qu'elle utilise beaucoup la copie pour permettre de crer des logiciels robuste et vite un bon nombre de bugs. Pour optimiser cela, Qt implmente le pattern COW (Copy on Write) : la copie interne est rellement effectue lors d'un accs en criture sur un objet interne partag d'une classe. Dit d'une autre manire, Qt va partager en lecture un objet interne entre diffrent instances gaux d'une classe. Le principe est le suivant : 1 Lors d'une copie, un objet interne est partag. 2 Tant qu'aucune des instances ne modifie cette objet, il reste partag. 3 Ds qu'une des instances modifie l'objet, cette instance va copier l'objet interne et appliquer la modification.

// s1 va crer un objet interne contenant "hello word" QString s1 = "hello word"; // s2 va rfrencer le mme objet interne que s1. // Il n'y a pas eu de vraie copie. QString s2 = s1; // Accs en lecture au premier caractre => inutile de faire une copie qDebug()doSomeComputation(); return myObjet->getString(); }

tonnamment, le code prcdent n'a pas de fuite de mmoire. L'objet MyObjet, cr sur le tas, a, comme parent, le QObject "parent". Lorsque parent arrive la fin de la fonction giveString(), son destructeur se charge de supprimer l'objet myObjet. L'exemple prcdent est artificiel, voyons un exemple plus raliste.

void showMessage() { QDialog dialog; QVBoxLayout *layout = new QVBoxLayout(&dialog); QLabel *message = new QLabel("Cliquez sur le bouton"); layout->addWidget(message); QButton *button = new QButton("Cliquez ici"); layout->addWidget(button); dialog.exec(); }

- 11 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Quelle magie fait que ce code fonctionne ? Lorsqu'un widget est ajout au layout, le layout le reparente automatiquement avec son widget propritaire (dialog dans ce cas-ci). Finalement, lorsque la fonction se termine, le destructeur de dialog supprime tous les objets et nettoie la mmoire. lien : Comment optimiser la copie de ses classes ?

Comment optimiser la copie de ses classes ?Auteurs : Yan Verdavaine , Une grosse partie de Qt est bas sur le COW. Il permet ainsi d'utiliser ce pattern. Pour cela, il faut crer une classe qui hrit" de QSharedData, et qui possde un constructeur, un constructeur par copie et un destructeur public. Cette classe sera l'objet interne qui sera partag. Elle possde un compteur de rfrences thread safe et ne doit pas tre directement accde. Sa vie sera gre par d'autres classes. Pour accder une instance de cette classe, deux choix sont possible : QSharedDataPointer : permet de partager implicitement un QSharedData. L'objet interne est partag en lecture. L'accs l'objet en criture va gnrer une copie de l'objet. QExplicitlySharedDataPointer : permet de partager explicitement un QSharedData. L'objet interne est partag en lecture/criture. L'objet interne sera copi uniquement sur demande.

Ces deux classes sont des pointeurs intelligents spcialiss dans la manipulation des pointeurs sur QSharedData. Ils implmentent donc la smantique des pointeurs avec des accs const (lecture) et non const (criture). Elles dtruiront le QSharedData une fois son compteur zro. Ces pointeurs intelligents possdent deux fonctions qu'il est utile de connatre : detach() : si le compteur de rfrence est suprieur 1, le QSharedData sera copi ; reset() : initialise null le pointeur intelligent.

Remarque : ces classes sont thread safe. lien : lien : lien : Comment Qt optimise-t-il les copies ? Faq C++ : pointeurs intelligents Tutoriel : Pointeurs intelligents

- 12 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > Gnralits > Dploiement Comment dployer une application Qt sous Windows ?Auteurs : Franois Jaffr , Si vous avez cr votre application l'aide de Visual Studio et, par consquent, utilis le compilateur C++ de Microsoft, il faut procder de la manire suivante : Intaller le runtime VC, correspondant la version de Visual Studio que vous utilisez, sur la machine cible ; Mettre dans le rpertoire de votre excutable les DLL de Qt, QtCore4.dll et QtGui4.dll ; Ajouter dans ce mme rpertoire les DLL correspondant aux autres modules de Qt (QtXml4.dll, QtWebKit4.dll, QtSvg4.dll...), si votre excutable les utilise ; Ajouter dans ce mme rpertoire les DLL correspondant aux librairies tierces, complments de Qt (pour Qwt : qwt5.dll ; pour QCA : qca2.dll...), si votre excutable les utilise ; Ajouter le rpertoire correspondant aux plug-ins que vous utilisez.

Si vous avez compil votre application avec MinGW/GCC, procdez de la manire suivante : Ajouter la DLL du runtime de MinGW, mingwm10.dll, dans le repertoire de l'application ; Mettre dans le rpertoire de votre excutable les DLL de base de Qt, QtCore4.dll et QtGui4.dll ; De mme, ajouter, dans ce mme rpertoire, les DLL correspondant aux modules de Qt (QtXml4.dll, QtWebKit4.dll, QtSvg4.dll...), si votre excutable les utilise ; Ajouter dans ce mme rpertoire les DLL correspondant aux librairies tierces, complments de Qt (pour Qwt : qwt5.dll ; pour QCA : qca2.dll...), si votre excutable les utilise ; Ajouter le rpertoire correspondant aux plug-ins que vous utilisez.

Au final, le rpertoire d'une application Qt, utilisant, par exemple, les plug-ins MySQL, MNG, SVG et TIFF, ressemble ceci :|App \ -app.exe -QtGui4.dll -QtCore4.dll -QtSql4.dll (module SQL) -mingwm10.dll (si vous avez compil avec MinGW) \sqldrivers (rpertoire des drivers pour QtSQL) -qmysql.dll (driver MySQL) -libmysql.dll (DLL ncessaire au plug-in du driver MySQL) \imageformats (rpertoire des plug-ins de traitement des formats d'image) -qmng4.dll (MNG) -qsvg4.dll (SVG) -qtiff4.dll (TIFF)

Votre excutable doit, dans tous les cas, tre compil en mode release.

Les DLL de Qt se trouvent le plus souvent sous Windows dans C:\Qt\4.x.x\bin. Prenez bien les DLL correspondant la version release de Qt, celles qui n'ont pas de d dans leur nom. Par exemple, QtCore4.dll, la version release, et QtCored4.dll, la version debug. Les rpertoires contenant les plug-ins Qt se trouvent gnralement dans C:\Qt\4.x.x\plugins.

- 13 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > Gnralits > Contribuer Comment contribuer aux projets Qt ?Auteurs : Jonathan Courtois , Depuis la version 4.5 sortie en mars 2009, le framework Qt est pass en licence LGPL, ce qui a eu pour effet de permettre tout dveloppeur d'y contribuer. Pour cela, les dveloppeurs de Qt utilisent le gestionnaire de versions Git, et, plus particulirement, Gitorious, qui hberge des projets utilisant git gratuitement. Il est galement possible d'utiliser ce site pour vos propres projets. La mthode pour contribuer est la suivante (l'utilisation du protocole Git ne sera pas dtaille, assez complexe et ncessitant ddi). Allez la page des projets Qt ; Choisissez le projet pour lequel vous voulez contribuer : le framework Qt, Qt Creator, Qt Jambi, Qt Mobility, Qt Labs ou PySide ; Crez un compte sur le site Gitorious ; Clonez le rpertoire source du projet que vous avez choisi ; Envoyez vos changements en local sur une branche de votre rpertoire clone ; Crez une requte de fusion (merge) avec la branche principale ; Lisez et acceptez la licence de contribution de Qt ; Une quipe de dveloppeurs Qt va alors analyser votre requte ; Si le code est approuv, il sera ajout la branche principale de dveloppement des projets Qt ; dans le cas contraire, une requte choue vous sera retourn avec le motif de l'chec (bugs, mauvaise lisibilit du code, charte de programmation non respecte, etc.) ; En cas de succs, votre code sera alors disponible pour tous dans la prochaine version stable.

lien : lien : lien :

Gitorious Qt sur Gitorious Documentation de Git

Comment contribuer QtWebkit ?Auteurs : Benjamin Poulain , QtWebkit est maintenu sparment du dveloppement de Qt, il est dvelopp directement dans le dpt de Webkit. Contribuer QtWebkit est un peu diffrent de la manire de contribuer Qt. Les contributions sont un peu plus difficiles que pour Qt, car le dpt est partag avec Google et Apple. Les tapes pour contribuer sont les suivantes : Obtenir QtWebkit depuis le dpt de Webkit ou depuis le miroir sur Gitorious. Faire les changements voulus. Crer un rapport de bug. Les nouvelles fonctionnalits doivent aussi faire l'objet d'un rapport de bug. Si le patch concerne la partie Qt de Webkit (en particulier le code de WebKit/Qt), le mot-cl Qt devrait tre ajout la tche. Ensuite, il faut soumettre le patch dans la tche. Avant de gnrer le diff, il faut crer un Changelog des modifications. Pour gnrer le changelog, il faut excuter le script WebKitTools/Scripts/prepare-ChangeLog. Il faut ensuite dcrire les modifications dans le changelog cr. Soumettre le patch.

- 14 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Si le patch est prt pour review, il faut choisir "?" dans le champ Review du patch.

Le wiki de Webkit fournit aussi quelques informations sur les contributions Qt. Les reviews sont rarement accord la premire fois. Les dveloppeurs de Webkit sont extrmement pointilleux sur : La prsence de tests unitaires, Les conventions de codage, lgrement diffrentes des conventions de Qt. lien : lien : lien : lien : lien : lien : lien : lien : Comment contribuer aux projets Qt ? Dpt de Webkit Gitorious Dpt de Webkit sur Gitorious Rapport de bug et soumission des patchs Page du wiki sur le rapport de bug pour QtWebKit Tests unitaires Conventions de codage

- 15 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > Le contenu de Qt4 Que contient Qt4 ?Auteurs : Matthieu Brucher , Qt4 a t dcoup en plusieurs sous-bibliothques, les modules, relativement indpendants les uns des autres. QtCore, qui contient les lments essentiels du fonctionnement de toutes les bibliothques Qt ; QtGui, qui contient les lments essentiels graphiques pour les autres bibliothques Qt ; QtNetwork, contenant des classes ddies la programmation rseau ; QtOpenGL, permettant le support d'OpenGL ; QtSql, permettant l'intgration de bases de donnes dans Qt ; QtSvg, permettant la lecture et l'criture de fichiers SVG ; QtXml, contenant les classes utiles la lecture et l'criture de fichiers XML ; QtDesigner, permettant l'extension de QtDesigner ; QtUiTools, permettant l'utilisations des fichier .ui de QtDesigner dans des applications ; QtAssistant, permettant d'utiliser le systme d'aide de Qt ; Qt3Support, permettant de rutiliser presque de manire transparente les anciennes classes de Qt3 ; QtTest, contenant des outils permettant de raliser des tests unitaires.

Chaque bibliothque peut tre ajoute ou retire des projets Qt, sachant que QtCore et QtGui sont ajoutes par dfaut.

lien :

Les modules Qt dans l'aide

Comment utiliser les modules de Qt ?Auteurs : Niak74 , Qt intgre par dfaut les modules QtCore et QtGui vos projets. Si vous souhaitez utiliser d'autres modules, ditez votre fichier PRO et modifiez la variable QT. Vous pouvez aussi retirer volontairement le module QtGui li par dfaut (dans le cas d'une application Qt).# Ajouter le module SQL QT += sql # Retirer le module GUI QT -= gui

Voici les modules de Qt ainsi que la valeur ajouter QT si vous les utilisez. core (inclus par dfaut) : QtCore gui (inclus par dfaut) : QtGui network : QtNetwork opengl : QtOpenGL phonon : Phonon sql : QtSql svg : QtSvg xml : QtXml webkit : QtWebkit qt3support : Qt3Support

Pour savoir quel module contient la classe Qt que vous souhaitez utiliser, reportez vous la documentation officielle Qt. Chaque classe possde un en-tte format de la manire suivante :

- 16 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Nom_de_la_classe Class Reference Module_contenant_la_classe

- 17 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > La compilation

- 18 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > La compilation > Gnralits sur la compilation Comment compiler des projets utilisant Qt 4 ?Auteurs : Alp Mestan , Les dveloppeurs de Qt 4 proposent des outils trs utiles qui facilitent la gestion de vos projets utilisant Qt 4. En effet, il existe un outil permettant de transformer les fichiers du designer (.ui) en fichiers C++, un autre permettant de gnrer le code ncessaire pour la cration de widgets personnaliss... Cependant, ils fournissent galement un outil permettant de grer automatiquement les fichiers du designer, les fichiers dans lesquels vous dfinissez des widgets personnaliss, et mme en ralit tout votre projet : qmake. Cet outil permet de gnrer un fichier de projet .pro, de gnrer partir de ce dernier les rgles de compilation de votre projet, et bien d'autres choses, comme la dtection de votre compilateur, du rpertoire d'installation de Qt 4... Un tutoriel a t crit pour prsenter cet outil et dcrire son utilisation : Compilation des projets Qt 4.

lien :

Compilation des projets Qt 4

Comment avoir des classes utilisant Q_OBJECT sans .h ?Auteurs : Yan Verdavaine , En C++, il peut tre parfois intressent de dclarer une classe directement dans un fichier d'implmentation (.cpp, .cxx, .cc...). Seulement, certaines classes exploites par Qt obligent les fichiers passer par le moc. Pour remdier ce problme, il est tout fait possible d'appliquer le moc sur ce fichier. En contre partie, il faut inclure le fichier gnr la suite de la dclaration de la classe dans le .cpp. Si vous utilisez qmake, il suffit, juste aprs la dclaration de la classe, d'inclure un fichier utilisant le nom du fichier cpp suivi de l'extension .moc. Cette mthode est utilise dans certains codes de la Q/R pour simplifier la compilation de l'exemple un seul fichier. Fichier nomm test.cpp... class myTest : QObject { Q_OBJECT ... }; #include "test.moc" ...

Comment compiler Qt ?Auteurs : Thibaut Cuvelier , Avant de compiler Qt, vrifiez que des binaires ne sont pas dj fournis sur Developpez.com. Tout d'abord, pour une compilation simple, avec toutes les options par dfaut, utilisez un de ces jeux de commandes. Vous devez utiliser, sous Windows, un invite configur pour votre compilateur (avec les variables %PATH%, %INCLUDE% et %LIB% configures), tel que l'Invite de commandes de Visual Studio 2002 / 2003 / 2005 / 2008,- 19 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

disponible dans le menu Dmarrer (sous 2000 / XP : Tous les programmes > Microsoft Visual Studio 2002 / 2003 / 2005 / 2008 > Visual Studio Tools ; sous Vista et Seven : utilisez la barre de recherche). Pour Visual Studiorem set rem set rem set rem set rem set rem set Version 9.0 : QMAKESPEC="win32-msvc2008" Version 8.0 : QMAKESPEC="win32-msvc2005" Version 7.1 : QMAKESPEC="win32-msvc2003" Version 7.0 : QMAKESPEC="win32-msvc2002" Versions 7.0+ : QMAKESPEC="win32-msvc.net" Version 6.0 : QMAKESPEC="win32-msvc'

configure nmake

Pour les autres compilateursconfigure make

configure vous demandera si vous acceptez la licence de Qt : vous devez d'abord la lire (), puis l'accepter (y). Si vous voulez personnaliser votre compilation (ajouter le support d'autres librairies comme OpenSSL, par exemple), vous pouvez voir l'ensemble des drapeaux disponibles en utilisant cette commande.

Comment cross-compiler Qt ?Auteurs : Thibaut Cuvelier , Il vous suffit de prciser le drapeau -xplatform lors de la configuration de Qt. Celui-ci informera le compilateur que les binaires devront tre excutables sur cette plateforme, et que les outils doivent se lancer sur la plateforme hte (prcise ventuellement par le drapeau -platform). Vous pouvez spcifier tous les autres drapeaux dont vous avez besoin. Pour pouvoir cross-compiler Qt, vous devez disposer d'un cross-compilateur (par exemple, GCC, ou l'un des cross-compilateurs fournis avec Visual Studio) ! Voici deux listes reprenant l'ensemble des plateformes supportes. Supported Platforms Cross-compilation de Qt4 cross-compilation avec GCC 4 sous Windows pour Linux

Pour obtenir un compilateur, regardez l'article sur la

- 20 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

configure -h

Quand et comment raliser une compilation "statique"?Auteurs : Benjamin Poulain , Vous n'avez le droit de compiler Qt statiquement que si : Vous crivez un logiciel open-source sous licence GPL, ou Vous avez une licence commerciale.

Si vous n'tes pas dans un de ces deux cas, ne compilez pas statiquement votre application. La LGPL ne change rien au problme : l'utilisateur doit pouvoir remplacer votre version de Qt par celle qu'il dsire. Si vous liez statiquement Qt, l'utilisateur ne pourra pas remplacer Qt, et vous serez en infraction avec la licence. Compiler statiquement une application permet de gagner lgrement en performance et de diminuer lgrement la taille du package distribuer. Il est rare de compiler statiquement pour GNU/Linux pour des raisons de performance et de flexibilit. Pour compiler statiquement, il faut une version de Qt compile statiquement, il faut recompiler la bibliothque avec l'option -static. Ensuite, il faut compiler l'application elle-mme statiquement. Si vous utilisez qmake, il suffit d'ajouter la directive CONFIG += static au fichier de configuration (fichier .pro), de relancer qmake et de recompiler le projet. Il reste le problme des plug-ins. Qt charge certaines fonctionnalits grce un systme de plug-ins. Ce chargement dynamique ne peut videmment pas fonctionner en version statique. Pour utiliser un plug-in, il faut modifier l'application pour le charger explicitement la compilation. Ceci est fait l'aide de la macro Q_IMPORT_PLUGIN().#include #include Q_IMPORT_PLUGIN(qtaccessiblewidgets) Q_IMPORT_PLUGIN(qjpeg) Q_IMPORT_PLUGIN(qgif) int main(int argc, char *argv[]) { ...

Le plug-in qtaccessiblewidgets permet d'utiliser les outils d'accessibilit avec l'application, il est recommand de toujours inclure ce plug-in.

Comment utiliser une bibliothque externe dans mon projet ?Auteurs : Niak74 , Utiliser une bilbiothque (statique ou dynamique) dans un projet ncessite deux choses : Indiquer au compilateur o rechercher les fichiers d'en-tte relatifs la bibliothque pour avoir accs aux fonctions qu'elle propose ; Indiquer au compilateur de lier la bilbiothque l'excutable du projet.

tape 1 : indiquer au compilateur le chemin des fichiers d'en-tte de la librairie externe- 21 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

La manire classique est d'ajouter l'option de compilation suivante l'appel de votre compilateur :-I/chemin/des/en-ttes/de/la/bilbiothque

Si vous utilisez un IDE, fouillez dans les proprits de votre projet afin de lui indiquer o rechercher les fichiers d'entte de votre bibliothque. Avec Qt, il faut ajouter une ligne au fichier de projet (.pro) :INCLUDEPATH += /chemin/des/en-ttes/de/la/bilbiothque

Vous pouvez ds prsent inclure dans votre code source des fichiers provenant du rpertoire spcifi. tape 2 : Indiquer au compilateur de lier la bibliothque l'excutable Pour lier une librairie l'excutable d'un projet Qt, il est ncessaire de modifier le fichier de projet afin que le Makefile gnr par qmake tienne compte de cette bibliothque. Prenons l'exemple du fichier d'import de la bibliothque libmaLibrairie.a localise dans /chemin/de/la/lib/ libmaLibrairie.a. La manire classique de linker (lier) une bibliothque un projet C/C++ est d'ajouter les options de compilation suivantes lors de l'excution du linker (ld, sous les systmes GNU/Linux) :-lmaLibrairie -L/chemin/de/la/lib

On ne prcise pas le prfixe (lib) ni l'extension (.a) du fichier d'import !

Sous Qt, il faut ajouter des lignes au fichier de projet :LIBS += -lmaLibrairie LIBS += -L/chemin/de/la/lib

Sous Windows, le caractre \ utilis comme sparateur dans les chemins doit tre chapp (par exemple, C:\MonDossier devient c:\\MonDossier). De plus, l'espace dans un nom de dossier peut entraner des erreurs, indiquez-le dans ce cas entre guillemets (par exemple, C:\\Mon Dossier devient "c:\\Mon Dossier"). Une fois le fichier de projet modifi, excutez qmake pour mettre jour les Makefile, puis make (ou nmake sous Visual Studio) pour recompiler votre projet.

Quelles sont les dpendances de Qt ?Auteurs : Thibaut Cuvelier , Qt est un framework trs complet, il propose beaucoup de choses de lui-mme. Cependant, trs souvent, il n'est pas utile de rinventer la roue : Qt, comme beaucoup d'autres, se base donc sur d'autres librairies, crites par d'autres, pour proposer certaines fonctionnalits. Voici ces librairies et leurs versions minimales, qui peuvent ajouter des fonctionnalits Qt. Elles doivent tre actives ds la compilation ; on peut la demander grce des drapeaux passs configure.- 22 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Gnral Support OpenSSL : OpenSSL (v0.9.8) ; Support DBus : DBus ; Support Direct3D (dprci ds Qt 4.5) : DirectX SDK (v9) ; Support OpenGL : inclus dans l'OS. Il est possible d'activer le support de Direct3D aussi pour MinGW.

Back-ends Phonon Back-end DirectX : DirectX SDK (v9) ; Back-end VLC : libvlc ; Back-end MPlayer : MPlayer ; Il est possible d'activer le support de Direct3D aussi pour MinGW.

Les librairies ncessaires sont en gnral installes en mme temps que le SGBD. Plug-in MySQL : MySQL 4 ; Plug-in Oracle : Oracle 9i ; Plug-in ODBC : livr avec Windows ; implmentation autre pour UNIX ; Plug-in PostgreSQL : PostgreSQL 7.3 ; Plug-in Sybase : FreeTDS, MS DB-Library, Sybase Open Client ; Plug-in DB2 : DB2 7.1 ; Plug-in SQLite : 2 et 3 (la dernire est livre avec Qt) ; Plug-in Borland InterBase : InterBase ; Plug-in FireBird (IB Free) : FireBird 2.

Quels sont les compilateurs utilisables avec Qt ?Auteurs : Jonathan Courtois , Si vous tlcharg le SDK de Qt partir du site officiel, les sources sont dj compiles pour la plateforme choisie l'aide du compilateur MinGW (portage de GCC pour Windows). Cependant, il est possible de compiler ces sources avec d'autres compilateurs, notamment les compilateurs natifs de chaque plateforme (comme Visual C++ sous Windows). Actuellement, voici l'ensemble des compilateurs supports pour la version 4.5.3 de Qt, dans leur notation canonique : Plateformes soutenues activement aix-xlc, aix-xlc-64, hpux-acc, hpux-g++, hpux-g++-64, hpuxi-acc, qws/linux-arm-g++, qws/linux-x86-g++, linux-g+ +, linux-icc, linux-icc-32, linux-icc-64, macx-g++, macx-g++42, solaris-cc, solaris-g++, win32-g++, win32-icc, win32msvc2003, win32-msvc2005, win32-msvc2008, wince-msvc2005, wince-msvc2008 Platformes soutenues par la communaut Qt darwin-g++, freebsd-g++, freebsd-g++34, freebsd-g++40, freebsd-icc, hpuxi-g++, linux-cxx, linux-ecc-64, linux-g++, linux-kcc, linux-llvm, linux-lsb-g++, lynxos-g++, macx-llvm, netbsd-g++, openbsd-g++, qws/linux-g++ Platformes prcdemment soutenues irix-cc, irix-g++, win32-msvc, win32-msvc2002, win32-msvc.net

- 23 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Pour compiler les sources Qt avec les plateformes supportes, il est ncessaire que le compilateur soit install sur votre machine, que les variables permettant de le connatre soient dfinies dans l'instance de votre shell (invite de commande sous Windows) et que vous ajoutiez l'argument -platform lors de l'appel configure (configuration de la compilation), suivi du compilateur sous la forme canonique (par exemple, $>configure -platform win32-msvc2008).

lien : lien : lien : lien :

Installation de Qt 4 sous Windows avec Dev-C++ Installation de Qt 4 Open Source, avec le support pour MySQL, Firebird et OpenSSL sous Windows Cross-compilation de programme Qt4 de Linux vers Windows Cross-compilation de Qt4

- 24 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > La compilation > qmake Comment ajouter une console une application ?Auteurs : Yan Verdavaine , Sous Windows, l'ajout d'une console pour un application peut tre importante : Application en ligne de commande ; Visualisation des messages Qt ; Visualisation des sortie standard ; ...

Pour cela, il suffit d'ajouter cette ligne dans votre fichier de projet .pro :CONFIG += console

Il peut aussi tre intressant de n'activer la console que pour la version debug. Il faut alors ajouter cette ligne votre fichier de projet .pro :debug:CONFIG += console

Comment compiler un projet Qt dans un rpertoire spcifique ?Auteurs : Jonathan Courtois , Le fichier .pro de projet Qt permet de dfinir un certain nombre de variables qui influence la compilation ralise par qmake. Certaines de ces variables permettent de dfinir le rpertoire de sortie des diffrents fichiers gnrs pendant la phase de compilation. DESTDIR : Fichiers de sortieDESTDIR = ../bin

MOC_DIR : Fichiers gnrs par l'outil moc (un fichier par classe hritant de QObject)MOC_DIR = ../tmp

OBJECTS_DIR : Fichiers objets intermdiaires du compilateurOBJECTS_DIR = ../tmp

RCC_DIR : Fichiers gnrs par l'outil rcc (sources C++ contenant les donnes des ressources Qt)RCC_DIR = ../resources

UI_DIR : Fichiers gnrs par l'outil uic (en-ttes C++ correspondant aux fichiers d'interface)UI_DIR = ../ui

- 25 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > QtCore Un new sans delete ?Auteurs : Matthieu Brucher , Dans un code Qt4, on verra souvent un new sans delete associ. En fait, si une nouvelle instance de QObject est cre et qu'on lui spcifie un parent - le premier argument du constructeur -, c'est ce parent qui sera charg de la destruction du fils. La majorit des classes de Qt4 hrite plus ou moins directement de QObject, mais attention, ce n'est pas le cas de toutes. L'indicateur est la possibilit de passer un objet parent au constructeur. lien : Allouer sur le tas ou sur la pile des QObject et drivs ?

Erreur d'dition des liens undefined reference to 'vtable for xxx' ?Auteurs : Matthieu Brucher , Cette erreur se produit lorsque la partie QObject d'une classe n'a pas t ajoute l'dition des liens. Lors de l'utilisation de la macro Q_OBJECT, on dfinit un certain nombre de mthodes et de variables statiques. Ces mthodes et ces variables sont implmentes dans un fichier gnr automatiquement par qmake l'aide de l'outil moc. Vous pouvez naturellement crer ce fichier manuellement et l'ajouter pour compilation et dition des liens.

lien : lien :

La classe QObject Les signaux et slots

Comment ouvrir une application partir de Qt ?Auteurs : Yan Verdavaine , Qt fournit la classe QProcess. Cette classe permet de contrler l'excution d'une application dans un nouveau process. Il est ainsi possible de contrler : les variables d'environnements par la mthode setEnvironement() ; le rpertoire d'excution par setWorkingDirectory() ; de lancer l'application par la fonction start().

La fonction start() cre un processus enfant (qui sera ferm si le processus parent est ferm) avec, pour paramtres : Le path de l'excutable, La liste des paramtres d'entre de l'excutable, Un mode d'ouverture pour interagir avec l'application par le biais des entres/sorties standards.

Cette classe possde d'autres fonctions pour lancer une application : QProcess::execute : quivalent start(). Bloquante jusqu' la fin de l'excution de l'application lance. QProcess::startDetached : permet de lancer une application dans un processus indpendant. Peut donner le PID du process cr.

Il est bon de remarquer que ces fonctions :- 26 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Ont des paramtres similaires ceux de start() : le path de l'excutable, et la liste des paramtres d'entre de l'excutable ; Ne donnent pas de moyen pour interagir avec le process par le biais des entres/sorties standards ; Ces deux fonctions sont des fonctions statiques et peuvent tre appeles sans cration d'un QProcess. Dans ce cas, les variables d'environnement et le rpertoire d'excution seront les mmes que ceux de l'application courante. Exemple utilisant QProcess::startDetached#include class MyQPushButton : public QPushButton { public : // crateur. // text : texte du bouton // exe : commande excuter lors de l'appui. MyQPushButton(const QString & text,const QString & exe, QWidget * parent = 0) : QPushButton (text,parent), m_exe(exe) { resize(75, 30); setFont(QFont("Times", 18, QFont::Bold)); }; virtual void mouseReleaseEvent ( QMouseEvent * event ) { // Lance la commande dans un processus indpendant QProcess::startDetached (m_exe); } private : QString m_exe; }; int main(int argc, char* argv[]) { QApplication app(argc, argv); QWidget w; QVBoxLayout vl(&w); // bouton : ouvre grce au CMD la page vers DVP/Qt MyQPushButton bouton1("Ouvrir DVP / Qt","cmd /c start http://qt.developpez.com/",&w); // bouton : lance notepad MyQPushButton bouton2("Ouvrir notepad","notepad",&w); // bouton : lance invite de commande MyQPushButton bouton3("Ouvrir invite de commande","cmd" ,&w); vl.addWidget(&bouton1); vl.addWidget(&bouton2); vl.addWidget(&bouton3); w.show(); return app.exec(); }

Comment interagir avec une application lance par un QProcess?Auteurs : Yan Verdavaine , QProcess permet de lancer des applications externes (Comment ouvrir une application partir de Qt ?). Elle permet surtout d'interagir avec l'application la manire d'un pipe au travers des entres/sorties standards de l'application.

- 27 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Ainsi le troisime paramtre de la fonction start permet de spcifier quel type d'interaction on veut utiliser (par dfaut, les deux types sont activs) : Mode read : rcupration de la sortie standard (stdout) et d'erreur (stderr) ; Mode write : criture sur l'entre standard de l'application (stdin).

QProcess utilise les mthodes dfinies par QIODevice pour ces interactions. Pour la rcupration des sorties, il faut faire attention au channel que l'on est en train de lire. pour la sortie standard il faut utiliser : QProcess::StandardOutput pour la sortie d'erreur il faut utiliser : QProcess::StandardError

De plus QProcess fournit deux signaux intressants, qui indiquent si des donnes venant d'une des sorties sont arrives. readyReadStandardOutput () : des donnes provenant de la sortie standards sont prtes tre traites readyReadStandardError () : des donnes provenant de la sortie d'erreur sont prtes tre traites

Ces interactions sont aussi possibles l'aide de fichiers : setStandardErrorFile : fichier o l'on rcupre la sortie d'erreur de l'application lance ; setStandardOutput : fichier o l'on rcupre la sortie standard de l'application lance ; setStandardInputFile : fichier contenant les donnes envoyer sur l'entre standard de l'application lance. Sous Windows XP, un programme lisant l'entre standard (stdin) en parallle de son IHM, peut se bloquer lorsqu'il est excut en process enfant. Ce bug est normalement corrig sous vista. lien : Comment ouvrir une application partir de Qt ? TestQProcess

Comment interagir avec les applications associes par dfaut ?Auteurs : Yan Verdavaine , Denys Bulant , Qt fournit la classe QDesktopServices et en particulier la fonction statique QDesktopServices::openUrl, qui permet d'interagir avec les applications associes par dfaut. Elle peut tre tendue si ncessaire pour ajouter ses propres handlers pour un schma donn.

#include class MyQPushButton : public QPushButton { public : // crateur. // text : texte du bouton // exe : commande excuter lors de l'appui MyQPushButton(const QString & text,const QString & url, QWidget * parent = 0) : QPushButton (text,parent) , m_url(url) { resize(75, 30); setFont(QFont("Times", 18, QFont::Bold)); }; virtual void mouseReleaseEvent ( QMouseEvent * event ) { QDesktopServices::openUrl(m_url);

- 28 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

} private : QString m_url; }; int main(int argc, char* argv[]) { QApplication app(argc, argv); QWidget w; // Action : ouvre l'URL vers DVP /Qt MyQPushButton bouton1(" Ouvrir DVP / Qt","http://qt.developpez.com",&w); // Action : ouvre le fichier texte. /!\ ce fichier doit exister MyQPushButton bouton2("Ouvrir fichier txt","c:/test.txt",&w); // Action : ouvre l'dition d'un mail avec adresse et sujet remplis MyQPushButton bouton3("Envoyer mail","mailto:[email protected]?subject=test envoie mail" ,&w); QVBoxLayout vl(&w); vl.addWidget(&bouton1); vl.addWidget(&bouton2); vl.addWidget(&bouton3); w.show(); return app.exec(); }

Comment charger et utiliser dynamiquement une .dll, .so avec Qt ?Auteurs : Denys Bulant , Qt fournit la classe QLibrary permettant de charger de faon multi-plateformes une bibliothque dynamique, ainsi que d'en rcuprer des pointeurs vers les fonctions exportes. Aprs avoir cr un objet de ce type, il faut spcifier le nom de la bibliothque dynamique associer sans prciser l'extension (ce n'est plus multi-plateformes, sinon). Il suffit ensuite d'appeler resolve() en fournissant le nom du symbole trouver. Il est retourn en tant que void*, donc un cast sera bien videmment ncessaire. Sont aussi fournies des fonctions statiques vitant l'instanciation dans le cas o l'on ne voudrait rcuprer qu'un symbole. Par exemple, admettons qu'une fonction d'une bibliothque permette de compter le nombre de lettres dans un mot.

// dfinition du type de fonction typedef int (*StringLength)(char*); // cration d'un objet QLibrary li string_util (.dll, .so ou autre) QLibrary lib("string_util"); // rcupration d'un pointeur sur notre fonction partage StringLength strLength = (StringLength)lib.resolve("strlen"); if(strLength) // devrait renvoyer 9... si tout va bien ;) strLength("QLibrary");

Comment rcuprer les arguments envoys par la fonction main ?Auteurs : Louis du Verdier , Dans les annes 1980 1990 (aucune information ne prcise la date exacte), la fonction main() ne renvoyait rien, elle tait donc de type void. Plus rcemment, des amliorations de cette fonction ont introduit les arguments, qui sont, en fait, dans la norme actuelle, int argc et char *argv[]. Ces arguments sont complmentaires : char *argv[] reprsente un- 29 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

tableau de pointeurs de taille donne par int argc. Sur la plupart des systmes d'exploitation, le tout sert par exemple retrouver le chemin du programme lanc (avec argv[0]), ou encore par exemple retrouver un fichier par lequel s'est ouvert le programme (argc serait donc suprieur 1). Quel rapport avec Qt ? Eh bien, la bibliothque permet de rcuprer les arguments l'aide de la fonction QCoreApplication::arguments. La rcupration sert, par exemple, rcuprer le chemin d'un ventuel fichier ouvert par clic sur l'icne de celui-ci.

QStringList args = QCoreApplication::arguments(); QString nom_fichier = args[1];

Note : Lors de la dclaration de la fonction main(), il faut mettre les arguments pour que ce qui est donn marche, c'est dire utiliser un dbut de code comme celui-ci pour la fonction main :int main (int argc, char *argv[]) { QApplication app(argc,argv) // Suite du code }

Remarque : En rgle gnrale, le premier lment correspond au nom de l'excutable. Suivant la plateforme et le mode d'excution, cet lment peut aussi contenir le chemin relatif ou le chemin absolu de l'excutable concatn avec son nom. Voici un exemple permettant de clore.

const QStringList args = QCoreApplication::arguments(); // Si le programme a t ouvert par le biais d'un fichier if(args.count() > 1) { // On rcupre le chemin du fichier... QString nom_fichier = args[1]; // ... et on appelle une ventuelle fonction de lecture lireFichier(nom_fichier, this); } // ...

Attention : Sous Mac OS X, le double-clic sur un fichier ne sera pas renseign dans les arguments, contrairement Windows et Linux. Pour cela il faut utiliser QFileOpenEvent.

Comment empcher de lancer plusieurs instances d'un programme ?Auteurs : Franois Jaffr , Qt fournit, partir sa version 4.4, la classe QSharedMemory. Celle-ci permet la cration de zone de memoires partages entre plusieurs applications. C'est en crant une zone mmoire partage unique notre application et en vrifiant au dbut du programme si celle-ci existe dj que nous allons savoir si notre application est dja lance.#include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv);

- 30 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

/* Cration de la zone de mmoire partag identifie par une chaine de cractre. * On utilisera un GUID pour avoir un identifiant unique pour qu'il n'y ait pas de conflit * possible avec d'autres applications */ QSharedMemory sharedMemory("{69B55631-A712-4d8c-8852-A8ED297EF439}"); // On vrifie la cration de cette zone mmoire si celle-ci existe if(sharedMemory.create(sizeof(int))==false) { // Utilisation d'une QMessageBox pour prvenir l'utilisateur que le programme est dj lanc QMessageBox msgBox; msgBox.setText("L'application est dj lance"); msgBox.exec(); return 1; // On ferme l'application } QPushButton button("Hello Qt"); button.show(); return a.exec(); }

Comment lire et crire dans un fichier INI ?Auteurs : Franois Jaffr , Qt grce la classe QSettings permet de facilement manipuler des fichiers INI l'aide des mthodes suivantes. void QSettings ::beginGroup (const QString & prefix) : crer un groupe ; void QSettings ::endGroup() : fermer le groupe courant ; void QSettings ::setValue (const QString & key, const QVariant & value) : crer une clef et lui adresser la valeur donne ; si la clef existe dj, seule la clef sera mise jour ; QVariant QSettings ::value (const QString & key, const QVariant & defaultValue = QVariant()) const : Retourne la valeur correspondant la clef passe en paramtre ; si cette clef n'existe pas, elle retourne la valeur par dfaut prcise en paramtre (defaultValue).

Voici un fichier INI.[EquipeQt] membre1=dourouc05 membre2=zAmnellL membre3=IrmatDen [ModerateursQt] moderateur1=yan moderateur2=superjaja

Voici comment on pourrait l'crire.// Cration du fichier en prcisant que l'on travaille avec un fichier de format INI. QSettings settings("Developpez.ini", QSettings::IniFormat); // Cration du groupe [EquipeQt] settings.beginGroup("EquipeQt"); // Cration des diffrentes clefs et valeurs correspondantes settings.setValue("membre1", "dourouc05"); settings.setValue("membre2", "zAmnellL"); settings.setValue("membre3", "IrmatDen"); // On ferme le groupe [EquipeQt] settings.endGroup();

- 31 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

// Cration du groupe [ModerateursQt] settings.beginGroup("ModerateursQt"); // Cration des diffrentes clefs et valeurs correspondantes settings.setValue("moderateur1", "yan"); settings.setValue("moderateur2", "superjaja"); // On ferme le groupe [ModerateursQt] settings.endGroup();

Voici comment on pourrait le lire.// Ouverture du fichier INI QSettings settings("Developpez.ini", QSettings::IniFormat); // On rcupre la valeur de membre1 du groupe [EquipeQt] QString membre1 = settings.value("EquipeQt/membre1","Developpez").toString(); //membre1 == "dourouc05" // On souhaite rcuperer la cl membre4 du groupe [EquipeQt]. // Celui-ci n'existant pas c'est la valeur par default qui est retou_r_n. QString defaultValue = settings.value("EquipeQt/membre4","Developpez") .toString(); // defaultValue == "Developpez" // On rcupre la valeur du moderateur2 dans le groupe [ModerateursQt] QString moderateur2 = settings.value("ModerateursQt/moderateur2","developpez") .toString(); // moderateur2 == "superjaja"

Problmes de traduction ?Auteurs : Thibaut Cuvelier , Si vous avez des problmes avec la traduction de votre application, vous pouvez vrifier ces quelques points. 1 2 3 4 5 6 7 Les chanes sont-elles bien toutes entoures de tr() ? Une variable serait-elle passe en paramtre de tr() ? QT_TR_NOOP() serait-elle utilise sans tr() ? La classe traduire hrite-t-elle bien de QObject ? La classe traduire appelle-t-elle la macro Q_OBJECT ? Avez-vous install le QTranslator ? Avez-vous install le QTranslator aprs avoir cr la fentre ?

lien : Qt Quarterly, Issue 3 : le chef sudois

Comment calculer un hash cryptographique de donnes ?Auteurs : Thibaut Cuvelier , Pour ce faire, Qt 4.3 et suivants nous proposent la classe QCryptographicHash. Elle peut hasher n'importe quel QByteArray avec les algorithme MD4, MD5 et SHA1. Seul le dernier est encore un peu scuris, mais c'est le plus lent. Une collision, c'est deux donnes qui ont le mme hash. Le temps qu'il faut pour trouver une collision dtermine la scurit d'un algorithme de hashage. On peut calculer des collisions pour les deux premiers en moins d'une minute sur un ordinateur moyen, contrairement aux 235 oprations requises pour SHA1 (34 359 738 368 oprations, prcisment). Chercher un moyen de trouver des collisions s'appelle la cryptanalyse- 32 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Cependant, pour des besoins volus (systme banquaire, authentification sur un site), SHA1 ne convient plus, et doit tre remplac par un algorithme plus performant, comme Whirlpool ou RipeMD-160, pour lesquels on ne connat pas encore de mthode pour trouver des collisions. Qt ne supporte pas nativement d'autres algorithmes de hashage. Pour pallier ce manque, la communaut fournit QCA (Qt Cryptographic Architecture). Cette bibliothque se base sur Qt, et lui fournit moult autres fonctionnalits orientes vers la scurit. Tous les algorithmes de hashage seront, un jour ou l'autre, cryptanalyss, et on pourra trouver assez facilement des collisions avec un ordinateur moyen. C'est pour a que, sans cesse, des commits cherchent les failles, et dveloppent de nouveaux algorithmes. On peut utiliser cette classe de manire statique, sans instancier d'objet. Pour cela, on peut utiliser la mthode hash(). Voici son prototype.QByteArray QCryptographicHash::hash ( const QByteArray & data, Algorithm method )

Algorithm est une numration, que voici.enum Algorithm { Md4, Md5, Sha1 }

Un exemple d'utilisation statiqueQByteArray data ("Some data to hash"); QByteArray result (""); result = QCryptographicHash::hash ( data, QCryptographicHash::Sha1 );

On peut aussi instancier l'objet, si on ne peut pas prciser toutes les donnes d'un seul coup. On prcise l'algorithme de hashage lors de l'instanciation de l'objet. Pour ajouter des donnes hasher, les mthodes addData() doivent tre utilises. Voici leurs prototypes.void QCryptographicHash::addData ( const char * data, int length ) void QCryptographicHash::addData ( const QByteArray & data )

La mthode result() permet de rcuprer le hash. Un exemple d'utilisation dynamiqueQByteArray data ("Some data to hash"); QByteArray oData ("Other data that will be hashed"); QByteArray result (""); QCryptographicHash hasher (QCryptographicHash::Sha1); hash- addData (data) ; hash->addData ( oData->data(), oData->size() ); result = hash->result();

lien : Qu'est-ce que QCA ?

Comment imprimer avec Qt ?Auteurs : Shugo78 , L'impression avec Qt est a peu prs quivalente au dessin sur un QWidget ou QImage. Il y a plusieurs tapes :- 33 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

1 2 3 4 5 6

Crer un QPrinter comme priphrique de dessin ; Ouvrir un QPrintDialog pour que l'utilisateur choisisse une imprimante et certaines options ; Crer un QPainter pour agir sur le priphrique de dessin ; Dessiner une page avec le QPainter ; Changer de page avec QPrinter::newPage() ; Recommencer les 2 tape prcdentes jusqu' que tout soit imprim.

Sous Windows et Mac, QPrinter utilise les pilotes d'imprimante systmes. Sous UNIX, il cr un PostScript qu'il envoie lp ou lpr (vous pouvez dfinir le programme auquel envoyer le PostScript avec la fonction QPrinter::setPrintProgram()). QPrinter peut aussi tre utilis pour imprim un fichier PDF en appelant setOutputFormat(QPrinter::pdfFormat).void printImage (const QImage &image) { QPrintDialog printDialog (&printer, this) if (printDialog.exec()) { QPainter painter (&printer); QRect rect = painter.viewport () QSize size = image.size (); size.scale (rect.size (), Qt::KeepAspectRatio); painter.setViewport (rect.x (), rect.y (), size.width (), size.height ()); painter.setWindow (image.rect ()); painter.drawImage (0, 0, image); } }

Quels sont les pointeurs intelligents de Qt ?Auteurs : Thibaut Cuvelier , Qt est extrmement bien fourni en classes de pointeurs intelligents : QPointer (4.0) ; QSharedDataPointer (4.0) ; QExplicitlySharedDataPointer (4.3) ; QSharedPointer (4.5) ; QWeakPointer (4.5) ; QScopedPointer (4.6).

Chacun de ces pointeurs a un signification particulire, un emploi particulier. Avant d'aller plus en avant, il faut savoir ce qui distingue les pointeurs intelligents, mais aussi quoi ils servent. Un pointeur intelligent permet de garder une rfrence un objet, en s'assurant qu'il sera dtruit un certain moment. Ils peuvent tre utiliss par plusieurs objets en mme temps, pour, par exemple, viter d'utiliser trop de mmoire. Principalement, ils peuvent partager des donnes ou un pointeur sur les donnes. Un pointeur intelligent pourrait donc contenir un pointeur ? Oui : cela peut tre utile lorsqu'un objet est partag par plusieurs objets. Ainsi, l'objet rfrenc n'est stock qu'une fois en mmoire. Ensuite, leur rfrence peut tre lgre ou forte. La rfrence forte implique que l'objet ne soit pas dtruit, cela est garantit par le pointeur intelligent. Tant qu'il existe, l'objet existe. Tandis qu'un pointeur rfrence lgre (weak pointer) ne peut le garantir : il faut s'assurer qu'il ne sera pas dtruit par d'autres moyens. QPointer est un pointeur intelligent assent lent, c'est pour cela qu'on lui prfre de loin QWeakPointer.- 34 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Il ne reste donc que 4 pointeurs intelligents, correspondant aux 4 combinaisons possibles des caractristiques prsentes Classe QSharedDataPointer & QExplicitelySharedDataPointer QSharedPointer QWeakPointer QScopedPointer & QScopedArrayPointer Description Partage de donnes (implicite et explicite) Partage comptage de rfrence de pointeurs rfrence forte Partage comptage de rfrence de pointeurs rfrence faible Emballage sans comptage de rfrence de pointeurs rfrence forte

lien : lien : lien : lien :

Comment optimiser la copie de ses classes ? Qu'est-ce qu'un pointeur intelligent ? Les pointeurs intelligents de Qt Pointeurs intelligents

Comment accder la base de registre Windows ?Auteurs : Franois Jaffr , La base de registre est trs importante pour Windows car elle contient les donnes de configuration du systme d'exploitation et des logiciels qui y sont installs. De mme, elle sert normment pour la configuration et l'initialisation des programmes. Par exemple, les cls situes dans la cl Run, elle-mme situe dans HKEY_CURRENT_USER, provoquent une excution automatique au dmarrage d'applications lors de l'ouverture d'une session. Qt permet de facilement lire et crire dans la base de registre de Windows l'aide de la classe QSettings.//Cration d'une nouvelle cl nomme "Developpez" dans HKEY_CURRENT_USER QSettings settings("HKEY_CURRENT_USER\\Developpez",QSettings::NativeFormat); //Cration de nouvelles cls avec leurs valeurs correspondantes dans "HKEY_CURRENT_USER\\Developpez" settings.setValue("Moderateur1", "yan"); settings.setValue("Moderateur2", "superjaja"); settings.setValue("ResponsableQt", "dourouc05"); //Lecture de la valeur moderateur1 QString value = settings.value("Moderateur1").toString(); //value == "yan" //Lecture de toutes les cls contenues dans "HKEY_CURRENT_USER\\Developpez" foreach(const QString& str,settings.allKeys()) { //str == Moderateur1, Moderateur2 puis ResponsableQt qDebug() setItemDelegateForColumn(0, new Delegate); for(int i = 0; i setData(model->index(i, 0), i); model->setData(model->index(i, 1), "Texte"); } view->show(); return app.exec(); }

- 37 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Sommaire > QtCore > QObject Allouer sur le tas ou sur la pile des QObject et drivs ?Auteurs : Matthieu Brucher , Benjamin Poulain , Chaque QObject contient une liste des pointeurs vers les QObject fils. Cette liste permet d'effacer automatiquement les objets fils de cette liste. Cette liste implique que les objets fils hritant de QObject devraient tre allous sur le tas et non la pile. A priori, le code d'effacement est fait de telle sorte qu'il ne devrait pas y avoir de problme en allouant un objet sur la pile car la destruction d'un objet entrane sa suppression dans la liste des parents. En revanche, effacer manuellement ou automatiquement par destruction dans la pile les objets fils peut entraner un surcot. Enfin, tant utilis avec une smantique de pointeurs, il vaut mieux utiliser les pointeurs.{ QObject parent; QObject *enfant = new QObject(&parent);

} // enfant est correctement supprim de la mmoire par parent

De mme, une instance hrite de QObject ne peut appartenir deux QObject.QObject *parent = new QObject; QObject *enfant = new QObject(parent); QObject autreParent; enfant->setParent(&autreParent); // change le parent de enfant delete parent; // enfant n'est pas supprim car parent ne "possde" plus enfant

La relation parent-enfant peut poser problme lorsque les QObject sont allous sur la pile. Lorsqu'un objet est allou sur la pile, et a un parent, le parent pourrait appeler delete sur l'objet qui est sur la pile.{ // !!! exemple de ce qu'il NE faut PAS faire, ne pas recopier ! QPushButton button("button"); QWidget widget; button.setParent(&widget); } // crash ici // lorsque widget est dtruit la fin du scope, il supprime button l'aide de delete. // button avait t alou sur la pile

lien : QObject lien : Le modle QObject

Hritage multiple avec QObject ?Auteurs : Matthieu Brucher , L'hritage multiple de QObject n'est pas possible. En effet, l'architecture de Qt - les mta objets - rend la chose impossible.

- 38 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2006 - 2010 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://qt.developpez.com/faq/

La FAQ Qt

Lorsque vous faites un hritage multiple, mettez en premier la classe hritant de QObject.

Peut-on utiliser des pointeurs intelligents sans danger avec des QObject ?Auteurs : Aurelien.Regat-Barrel , QObject (et toutes les classes qui en drivent) ne se marrient pas trs bien avec les pointeurs intelligents classiques du C ++, tels que auto_ptr ou shared_ptr. Comme expliqu dans la question Un new sans delete ?, Qt implmente via QObject un mcanisme de gestion de la mmoire dont le principe est qu'un QObject parent dtruise automatiquement tous ses objets QObject enfants. Ce mcanisme est fort pratique et permet de grandement simplifier la gestion de la mmoire. Cependant, il entre en conflit avec tout autre mcanisme de libration de la mmoire tel que ceux implm