Académique Documents
Professionnel Documents
Culture Documents
(2010)
Prsentation
QtestunebibliothquelogicielleorienteobjetetdveloppeenC++par QtDevelopmentFrameworks,filialedeNokia. Qtestuneplateformededveloppementdinterfacesgraphiques(GUI GraphicalUserInterface)fourniel'origineparlasocitnorvgienne TrollTech,puisracheteparNokiaenfvrier2008(http://qt.nokia.com/). Qtpermetlaportabilitdesapplicationsquin'utilisentquesescomposants parsimplerecompilationducodesource. LesenvironnementssupportssontlesUnix(dontLinux)quiutilisentle systmegraphiqueXWindowSystem,WindowsetMacOSX.les.
(2010)
Prsentation
Qtestprincipalementddieaudveloppementd'interfaces graphiquesenfournissantdeslmentsprdfinisappelswidgets (pourwindowsgadgets)quipeuventtreutilisspourcrerses propresfentresetdesbotesdedialoguecompltementprdfinies (ouverture/enregistrementdefichiers,progressiond'opration,etc). Qtfournitgalementunensembledeclassesdcrivantdeslments nongraphiques:accsauxdonnes,connexionsrseaux(socket), gestiondesfilsd'excution(thread),analyseXML,etc. Qtdisposed'unmoteurderendugraphique2Dperformant.
(2010)
Prsentation
Depuis,Qt4sparelabibliothqueenmodules: QtCore:pourlesfonctionnalitsnongraphiquesutilisesparlesautresmodules; QtGui:pourlescomposantsgraphiques; QtNetwork:pourlaprogrammationrseau; QtOpenGL:pourl'utilisationd'OpenGL; QtSql:pourl'utilisationdebasededonnesSQL; QtXml:pourlamanipulationetlagnrationdefichiersXML; QtDesigner:pourtendrelesfonctionnalitsdeQtDesigner,l'assistantdecration d'interfacesgraphiques; QtAssistant:pourl'utilisationdel'aidedeQt; Qt3Support:pourassurerlacompatibilitavecQt3. etdenombreuxautresmodules,etc. QtutiliseUnicode4.0pourlareprsentationdeseschanesdecaractres.
(2010)
Prsentation
Lesinteractionsaveclutilisateursontgresparunmcanisme appelsignal/slot.Cemcanismeestlabasedelaprogrammation vnementielledesapplicationsbasessurQt. Qtestnotammentconnupourtrelabibliothquesurlaquellerepose l'environnementgraphiqueKDE,l'undesenvironnementsdebureau lesplusutilissdanslemondeLinux. DeplusenplusdedveloppeursutilisentQt,ycomprisparmide grandesentreprises.Onpeutnotammentciter:Google,Adobe Systems,Asus,Samsung,Philips,ouencorelaNASAetbien videmmentNokia.
E.Remy B.Ernet J.Souli T.Vaira
(2010)
Prsentation
L'environnementdeQtestaussiconstitude:
(2010)
Licences
LasocitTrolltechmittoutd'abordlaversionUnix/LinuxdeQtsous licenceGNUGPLlorsquel'applicationdveloppetaitgalementsous GNUGPL.Pourlereste,c'estlalicencecommercialequientreen application.Cettepolitiquededoublelicenceestappliquepourtousles systmesdepuislaversion4.0deQt. Le14janvier2009,Trolltechannoncequ'partirdeQt4.5,Qtsera galementdisponiblesouslicenceLGPLv2.1(Licencepubliquegnrale limiteGNU).Cettelicencepermetainsidesdveloppementsdelogiciels propritaires,sansncessiterl'achatd'unelicencecommercialeauprsde QtDevelopmentFrameworks.
LeslicencesQt:http://qt.nokia.com/products/licensing/ LeslicencesGNU:http://www.gnu.org/licenses/licenses.fr.html
(2010)
Environnementde DveloppementIntgr
QtCreatorestl'environnementdedveloppementintgrddiQtetfacilitela gestiond'unprojetQt.Sonditeurdetexteoffrelesprincipalesfonctionsquesontla colorationsyntaxique,lecompltement,l'indentation,etc...QtCreatorintgreenson seinlesoutilsQtDesigneretQtAssistant. MmesiQtCreatorestprsentcommel'environnementdedveloppementderfrence pourQt,ilexistedesmodulesQtpourlesenvironnementsdedveloppementEclipseet VisualStudio.Ilexisted'autresEDIddisQtetdveloppsindpendammentde Nokia,commeQDevelopetMonkeyStudio. QtDesignerestunlogicielquipermetdecrerdesinterfacesgraphiquesQtdansun environnementconvivial.L'utilisateur,parglisserdposer,placelescomposants d'interfacegraphiqueetyrgleleurspropritsfacilement.Lesfichiersd'interface graphiquesontformatsenXMLetportentl'extension.ui.Lorsdelacompilation,un fichierd'interfacegraphiqueestconvertienclasseC++parl'utilitaireuic.
(2010)
Environnementde DveloppementIntgr
QDevelopestunenvironnementdedveloppementintgrlibrepourQt.Lebutde QDevelopestdefournirdanslesenvironnementslesplusutiliss,Linux,Windowset MacOSXd'unoutilpermettantdedvelopperenQtdelammemanireavecunIDE unique.IlintgregalementlesoutilsQtDesignerpourlacrationd'interfacegraphique etQtLinguistpourlesupportdel'internationalisation. KDevelopestunenvironnementdedveloppementintgr(IDE)pourKDE.Ilintgre galementlesoutilsQtDesignerpourlacrationd'interfacegraphiqueetQtLinguist pourlagestiondel'internationalisation. Autresbibliothquesgnralistesmultiplateformes,parmilesplusconnus:
GTK+,utiliseparl'environnementgraphiqueGNOME wxWidgets(anciennementwxWindows)
(2010)
Structuregnrale desclassesQt
(2010)
10
ArborescencedesclassesQt
LaclasseQWidget:
Leswidgets:
11
Premierprogramme
Qt4posecommeprincipequepourutiliseruneclasse,ilfautinclureunfichierheader dunomdelaclasse.
#include <QApplication> #include <QLabel> int main( int argc, char* argv[] ) { QApplication MonAppli( argc, argv ); QLabel *pMonTexte = new QLabel("<H1><center>Bonjour tous</center></H1>", NULL); pMonTexte->resize(200, 70); pMonTexte->show(); return MonAppli.exec(); } LaclasseQApplicationgrelesoptionsstandardsdunprogramme Qt(argc,argv)etlespropritsglobalesdelapplication: lestyledesfentres,lacouleurdufond,latailledelafentre principale laboucledcoutedesvnements larcuprationdinformationglobale(taillecran) lelangagedelapplicationinternationalisationi18n(cf.L10n, g11n) UnobjetdetypeQApplicationdoittrecravantcelledeswidgets UtiliserQCoreApplicationsilapplicationnestpasgraphique
(2010)
12
Principesdefonctionnement
InstanciationdelaclasseQApplication
Elledoittrecreavanttoutobjetgraphiqueetreoittouslesparamtres transmislafonctionmain(argc,argv).Elles'occupedetoutelagestion desvnements(etlesenvoieauxwidgetsconcerns).Cetobjetest toujoursaccessibledansleprogrammegrceaupointeurglobalnomm qApp. Lesapplicationsdoiventseterminerproprementenappelant QApplication::quit() Cettemthodeestappeleautomatiquementlorsdelafermeturedu dernierwidget. Unwidgetesttoujourscrcach,ilestdoncncessaired'appelerla mthodeshow()pourl'afficher
(2010)
13
Compilation:lignedecommande
Lagnrationd'uneapplicationsefaitenplusieurstapes:
crationd'unrpertoireetdessources(dpenddel'EDIutilis)
lenominitialdurpertoiredterminelenomduprojetetdoncdel'excutable quiseraproduit.
qmakeproject
gnreunfichier.proquidcritcommentgnrerunMakefilepourcompilerce quiestprsentdansledossiercourant.
qmake[makefile]
gnreunMakefilepartirdesinformationsdufichier.pro
make
appelclassiqueloutilmake,pardfautilutiliseunfichierappelMakefile
(2010)
14
Qmake
QtsevoulantunenvironnementdedveloppementportableetayantleMOC commetapeintermdiaireavantlaphasedecompilation/ditiondeliens,ila tncessairedeconcevoirunmoteurdeproductionspcifique.C'estainsi qu'estconuleprogrammeqmake. Cedernierprendenentreunfichier(avecl'extension.pro)dcrivantle projet(listedesfichierssources,dpendances,paramtrespasssau compilateur,etc...)etgnreunfichierdeprojetspcifiquelaplateforme. Ainsi,souslessystmesUNIX/Linux,qmakeproduitunMakefile. Lefichierdeprojetestfaitpourtretrsfacilementditableparun dveloppeur.Ilconsisteenunesried'affectationsdevariables. Manuel:http://doc.trolltech.com/4.x/qmakemanual.html
(2010)
15
ExempleFichierProjet
# #ProjectcreatedbyQtCreator20101003T09:33:45 # TARGET=Chronometre TEMPLATE=app SOURCES+=main.cpp\ chronometreihm.cpp\ cchronometre.cpp HEADERS+=chronometreihm.h\ cchronometre.h FORMS+=chronometreihm.ui
(2010)
16
Widgetsparentetenfant
Hirarchie
(2010)
17
Widgetsparentetenfant
#include <QApplication> #include <QLabel> #include <QPushbutton> int main( int argc, char* argv[] ) { QApplication MonAppli( argc, argv ); QWidget *pMaFenetre = new QWidget(); //position horizontale et verticale de la fenetre, puis dimensions de la fenetre pMaFenetre->setGeometry(100,300,200,80); //pour forcer l'affichage avec les accents-> QString::fromUtf8 QLabel* pMonTexte = new QLabel(QString::fromUtf8("<H1><center>Bonjour tous </center></H1>"),pMaFenetre); QPushButton *pMonBouton = new QPushButton("Quitter",pMaFenetre); pMonBouton->setGeometry(40,40,pMonTexte->width(),40); pMaFenetre->show(); return MonAppli.exec(); }
18
Hirarchiedeswidgets
Onpeutajouterdeswidgetsdansunlayout
voidQLayout::addWidget(QWidget*widget)
Onpeutassocierunlayoutunwidgetquidevientalorslepropritairedulayout etparentdeswidgetsinclusdanslelayout
voidQWidget::setLayout(QLayout*layout)
QHBoxLayout QBoxLayout QVBoxLayout QFormLayout QObject QLayout QGridLayout QStackLayout
(2010)
19
Signauxetslots
vnements
(2010)
20
Signauxetslots
Signaux
Signauxetslots
Signaux
emitnomSignal(parametreSignal);
signals:
(2010)
22
Signauxetslots
Slots
(2010)
23
Signauxetslots
Connexion
(2010)
24
Signauxetslots
Dconnexion
uneconnexionsignal/slotpeuttresupprime,parlamthode:
boolQObject::disconnect(constQObject*sender,constchar* signal,constQObject*receiver,constchar*method)
Vuegnrale
(2010)
25
Signauxetslots
Exemple
#include <qapplication.h> #include <qlabel.h> #include <qpushbutton.h> int main( int argc, char* argv[] ) { QApplication MonAppli( argc, argv ); QWidget *pMaFenetre = new QWidget(); //position hor,vert fenetre, dimensions fenetre pMaFenetre->setGeometry(100,300,200,80); // pour forcer l'affichage avec les accents-> QString::fromUtf8 QLabel* pMonTexte = new QLabel(QString::fromUtf8("<H1><center>Bonjour tous </center></H1>"),pMaFenetre); QPushButton *pMonBouton = new QPushButton("Quitter",pMaFenetre); pMonBouton->setGeometry(40,40,pMonTexte->width(),40);
QObject::connect(pMonBouton,SIGNAL(clicked()),&MonAppli, SLOT(quit()));
pMaFenetre->show(); return MonAppli.exec(); }
L'ajoutdecettelignepermetderendreactiflebouton
E.Remy B.Ernet J.Souli T.Vaira
(2010)
26
Gestionmmoire
Qtestbasautourdumodled'objetdeQt.Cettearchitectureest cequirendQtpuissantetfacileemployer.Elleestentirement baseautourdelaclasseQObjectetdel'outilmoc.Lesclasses graphiquesdriventtoutesdeQObject.LesQObjects'organisent euxmmesenarbred'objets.QuandoncreunQObject(unobjet graphiqueparexemple)avecunautreQObjectcommeparent, l'objetparentajoutelenouvelobjetcrsalisted'enfants. Sileparentestdtruit(appeldesondestructeur),ildtruira automatiquementtoussesenfants. Onnedtruira(oprateurdelete)doncquelesQObjectcrspar l'oprateurnewquin'ontpasdeparent.
(2010)
27
Gestionmmoire
Exemple:
Chose.h
#include"Chose.h"
Chose.cpp
Chose::Chose(QObject*parent,char*nom): QObject(parent){ setObjectName(nom); cout<<"Constructeur:"<< objectName().toStdString()<<endl;} Chose::~Chose(){cout<<"Destructeur:" <<objectName().toStdString()<<endl;} voidChose::Existe(){ cout<<"Enexcution:"<< objectName().toStdString()<<endl;}
(2010)
28
Gestionmmoire
Exemple(suite):
main.cpp
c f a
A b d e
#include"Chose.h"
intmain(intargc,char*argv[]){ ChoseA(NULL,"A"); Chose*aA=newChose(&A,"a"); Chose*bA=newChose(&A,"b"); Chose*aaA=newChose(aA,"c"); Chose*baA=newChose(aA,"d"); Chose*abA=newChose(bA,"e"); Chose*aaaA=newChose(aaA,"f"); A.Existe();aA>Existe();bA>Existe(); aaA>Existe();baA>Existe();abA >Existe();aaaA>Existe(); return0; }
(2010)
29
Exemple
#include<QtGui> classConvertisseur:publicQWidget{ Q_OBJECT private: QLineEdit*valeur; QLabel*resultat; QComboBox*choix; QPushButton*bConvertir; QPushButton*bQuitter; public: Convertisseur(QWidget*parent=NULL); ~Convertisseur(); signals: voidactualiser(); privateslots: voidconvertir(); voidpermuter(intindex); };
(2010)
30
Exemple
(2010)
31
Exercice
#include"Convertisseur.h" Convertisseur::Convertisseur(QWidget*parent):QWidget(parent){ valeur=newQLineEdit(this); resultat=newQLabel(this); choix=newQComboBox(this); bConvertir=newQPushButton("Convertir",this); bQuitter=newQPushButton("Quitter",this); valeur>setGeometry(10,10,50,30);resultat>setGeometry(290,10,50,30); choix>setGeometry(70,10,200,30);bConvertir>setGeometry(10,50,120,30); bQuitter>setGeometry(200,50,120,30); choix>addItem("Celcius>Farenheit");choix>addItem("Farenheit>Celcius"); connect(bConvertir,SIGNAL(clicked()),this,SLOT(convertir())); connect(this, connect(choix, connect(bQuitter, }
(2010)
32
Exercice
Convertisseur::~Convertisseur(){} voidConvertisseur::convertir(){ switch(choix>currentIndex()){ case0:resultat>setText(QString::fromUtf8("%1F").arg(9*valeur>text().toDouble()/5 +32,0,'f',2));break; case1:resultat>setText(QString::fromUtf8("%1C").arg(5*(valeur>text().toDouble() 32)/9,0,'f',2));break; } } voidConvertisseur::permuter(intindex){ valeur>setText(resultat>text().left(resultat>text().size()2));
(2010)
33
Documentation(http://doc.qt.nokia.com/)
Tutoriel:http://doc.trolltech.com/4.7/tutorials.html LarfrenceQt4:http://doc.trolltech.com/4.7/index.html,etplusparticulirementles conceptsdebase(http://doc.trolltech.com/4.7/qtbasicconcepts.html): SignalsandSlots; MainClasses; MainWindowArchitecture; Internationalization(pensezcrirevotreprogrammeenanglaispuisletraduireen franais); OpenGLModule. Lesdocumentationsdesoutilsindispensables: qmake(http://doc.trolltech.com/4.7/qmaketutorial.html); QtDesigner(http://doc.trolltech.com/4.7/designermanual.html); QtLinguist(http://doc.trolltech.com/4.7/linguistmanual.html); QtCreator(http://doc.qt.nokia.com/qtcreator2.0/index.html).
(2010)
34
Documentation
Quelquesautressourcesd'informationsmritantledtour:
ListedesTps:http://pluton.up.univmrs.fr/eremy/Ens/LPSIL.Qt/
(2010)
35