Introduction au développement avec Qt



Documents pareils
Warren PAULUS Robin GODEFROID. C++ - Interface Graphique avec Visual Studio 2010

Modéliser ses fenêtres avec Qt Designer

L'architecture MVC avec les widgets complexes

Construction d Interfaces Graphiques

Cours. Cours 8 : Révisions. Importance. Interface homme-machine

Environnements de développement (intégrés)

Modéliser ses fenêtres avec Qt Designer

Utilisation du logiciel GALAAD

Tutoriel code::blocks

WINDEV MOBILE. ios SMARTPHONE SUPPORT: IOS, ANDROID, WINDOWS PHONE 8.

Point sur les solutions de développement d apps pour les périphériques mobiles

Projet de développement

AVEC LIVE TRADER, VISEZ PLUS HAUT POUR VOS INVESTISSEMENTS

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

Silhouette Studio Leçon N 2

La programmation orientée objet et le langage C++

Bonnes pratiques de développement JavaScript

Paramètres d accessibilité des systèmes d exploitation Windows et Mac

ACCUEIL / Introduction. Introduction. Présentation de StarBoard Software Éléments de l écran Guide de démarrage rapide

Conservez la documentation à portée de main pour toute référence future. Le terme «pointeur» dans ce manuel désigne le pointeur interactif YA-P10.

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

L espace de travail de Photoshop

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Publier un Carnet Blanc

Fiche Mémo : Options d accessibilité sous Windows et Internet Explorer 5

Utilisation du logiciel Epson Easy Interactive Tools

INTRODUCTION AU CMS MODX

Formation Découverte du Web

Les calques : techniques avancées

Optimiser pour les appareils mobiles

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

PRISE EN MAIN D UN TABLEUR. Version OPEN OFFICE

eurobraille VOYONS ENSEMBLE MANUEL D'UTILISATION WIFI iris 40, 20 iris-s 32, 20 iris-kb 40,20 VERSION 1.82

point On obtient ainsi le ou les points d inter- entre deux objets».

Importation et exportation de contenu

Mes premiers diaporamas avec Open Office Impress?

Le Bureau Graphique (1/2)

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

2013 Pearson France Adobe Illustrator CC Adobe Press

Développement tablette Android. SophiaConf2011 Par Arnaud FARINE

Plateforme Applicative Zend PHP Cloud

Builds et tests Utilisation de CMake et de Dart

Créer des documents interactifs

Initiation au dessin Bitmap

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

Bien architecturer une application REST

GUIDE DE DÉMARRAGE. SitagriPro Infinite FINANCEAGRI. Un service. c o r p o r a t e

Prise en main rapide

La saisie d un texte

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Devenez un véritable développeur web en 3 mois!

Plate formes mobiles. Utilisation. Contexte 9/29/2010 IFC 2. Deux utilisations assez distinctes :

Contenu. Thème «responsive» pour WordPress Installer le thème responsive (disponible aussi sur le site wordpress.org) Activer ce thème

Créer un premier document avec Pages

Manuel d utilisation. Logiciel (Device Monitor) Pour les systèmes d imagerie numérique. Configuration requise Description générale

Les conseils et les procédures pour utiliser divers programmes francophones avec de l'hébreu

Manuel de System Monitor

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

IHM2. Eric Lecolinet - Télécom ParisTech 1. Toolkit graphique Qt Dessin interactif. Machines à états.

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

1. Développement embarqué. André KPOZEHOUE DOMAINES DE COMPETENCES CONNAISSANCES TECHNIQUES

GanttProject : guide utilisateur

Améliorer l expérience utilisateur en environnement TSE (Terminal Services, Services Bureau à distance, Remote App)

TUTORIEL CartoDB 11/03/15

Publier dans la Base Documentaire

Utiliser le service de messagerie électronique de Google : gmail (1)

Installation et prise en main d UBUNTU

Access 2007 FF Access FR FR Base

Optimisation interactive pour la visualisation d images médicales

PHP et le Cloud. All rights reserved. Zend Technologies, Inc.

Votre premier projet Android

Utiliser Freemind à l'école

Modifier les propriétés d'un widget

Réalisation de cartes vectorielles avec Word

l'ordinateur les bases

L ORDINATEUR FACILE D ACCÈS!

Mise en scène d un modèle dans l espace 3D

pcon.planner 6 Préparer et présenter une implantation en toute simplicité

Android 4 Les fondamentaux du développement d'applications Java

Open Source Professional Training

Avant-propos FICHES PRATIQUES EXERCICES DE PRISE EN MAIN CAS PRATIQUES

Inspiration 7.5. Brève description d Inspiration. Avantages d Inspiration. Inconvénients d Inspiration

Architecture générale des interfaces graphiques. IHM: Fondements des Interfaces Graphiques. Applications. Outils de construction d interfaces

DELEGATION ACADEMIQUE AU NUMERIQUE FORMATION ADMINISTRATEUR SCRIBE 2.3 ET CARTABLE EN LIGNE (CEL)

HP StorageWorks All-in-One Storage Manager Manuel de l utilisateur

PRISE EN MAIN D ILLUSTRATOR

µrv : Realité Virtuelle

ADOBE PHOTOSHOP ELEMENTS. Aide et didacticiels

C.F.A.O. : Conception et Fabrication Assistées par Ordinateur.

Correction des Travaux Pratiques Organiser son espace de travail

Guide de l utilisateur Mikogo Version Windows

Table des matières ENVIRONNEMENT

Bienvenue dans OpenOffice!

26 Centre de Sécurité et de

13) Calibrage du tableau Interwrite Dualboard

Wix : mettre en place un site d e commerce

Débuter avec Excel. Excel

Transcription:

Introduction au développement avec Qt Kévin Ottens Kévin Ottens Introduction au développement avec Qt 1/38

Plan Introduction L essentiel de Qt ++ Le maître de séance Le petit moment de mégalomanie ervin@kde.org ottens@irit.fr ottens@ups-tlse.fr? et pourtant non... kevin@kdab.com Kévin Ottens Introduction au développement avec Qt 2/38

Plan Introduction L essentiel de Qt ++ Le maître de séance Le petit moment de mégalomanie ervin@kde.org ottens@irit.fr ottens@ups-tlse.fr? et pourtant non... kevin@kdab.com Kévin Ottens Introduction au développement avec Qt 2/38

Plan Introduction L essentiel de Qt ++ Le maître de séance Le petit moment de mégalomanie ervin@kde.org ottens@irit.fr ottens@ups-tlse.fr? et pourtant non... kevin@kdab.com Kévin Ottens Introduction au développement avec Qt 2/38

Plan Introduction L essentiel de Qt ++ Le maître de séance Le petit moment de mégalomanie ervin@kde.org ottens@irit.fr ottens@ups-tlse.fr? et pourtant non... kevin@kdab.com Kévin Ottens Introduction au développement avec Qt 2/38

Plan Introduction L essentiel de Qt ++ Le maître de séance Le petit moment de mégalomanie ervin@kde.org ottens@irit.fr ottens@ups-tlse.fr? et pourtant non... kevin@kdab.com Kévin Ottens Introduction au développement avec Qt 2/38

Plan 1 Introduction 2 L essentiel de Qt Kévin Ottens Introduction au développement avec Qt 3/38

Plan 1 Introduction 2 L essentiel de Qt Kévin Ottens Introduction au développement avec Qt 4/38

Prérequis et Buts La connaissance est un mur de briques monté ligne par ligne C++ Utilisation des concepts objet Templates (au moins un peu, mais rien de poussé) Système d exploitation Ici *nix Savoir ce qu est un shell Buts Donner un aperçu de ce que l on peut faire avec Qt Donner les moyens d aller plus loin Kévin Ottens Introduction au développement avec Qt 5/38

Historique (1/2) Nos expériences passées déterminent ce que nous sommes Trolltech 1994 : Création de Trolltech à Oslo, Norvège 1996 : Première vente de Qt! (ESA) 1996 : Qt utilisé par la communauté KDE naissante 1999 : Qt2, bureaux en Australie 2000 : Qt/Embedded, bureaux aux Etats-Unis 2000 : Qt/X11 disponible sous GPL! 2001 : Sharp utilise Qtopia dans ses produits 2001 : Qt3! 2003 : Qt/Mac disponible sous GPL! 2005 : Qt4!! bureaux en Chine 2008 : Nokia rachète Trolltech Kévin Ottens Introduction au développement avec Qt 6/38

Historique (2/2) Nos expériences passées déterminent ce que nous sommes Qt Development Frameworks @ Nokia Objectifs: Qt Everywhere Multiplier la base de développeurs par 10 2008 : Sortie d une pre-release de Qt/S60 2009 : Sortie d une pre-release de Qt/Maemo 2009 : Sortie de Qt 4.6 (environ 20 plateformes supportées) Kévin Ottens Introduction au développement avec Qt 7/38

Qt, un aperçu De loin tout paraît plus simple D après les auteurs "Qt is a cross-platform application and UI framework. [...]" "Code Less. Create More. Deploy everywhere." Ce qu offre Qt Du C++ "modifié" Des outils et une API multi-plateforme pour...... développer des interfaces graphiques... faire des applications multi-thread... communiquer sur le réseau et entre applications... accéder à des bases de données, traiter du XML... interagir avec le web... interagir avec OpenGL... et bien plus! Kévin Ottens Introduction au développement avec Qt 8/38

Bibliothèques multi-plateformes (1/3) Tous les chemins ne mènent pas forcément à Rome Couche d API Une couche d API par dessus l API native Exemple: wxwidget Avantages: intégration visuelle Désavantages: Performance Expose le plus petit dénominateur commun Héritage et spécialisation des widgets difficiles voire impossible Kévin Ottens Introduction au développement avec Qt 9/38

Bibliothèques multi-plateformes (2/3) Tous les chemins ne mènent pas forcément à Rome Emulation d API Emule une API native sur les systèmes non natifs Exemple: Winelib émule l API Win32 sur les systèmes UNIX Avantage: l API native est utilisable sur un système Désavantages: Performances sur la plateforme non native Maintenance pour les développeurs de la bibliothèque Suit uniquement les fonctionnalités documentées, pas les bugs ou fonctionnalités non documentées et pourtant exploités Kévin Ottens Introduction au développement avec Qt 10/38

Bibliothèques multi-plateformes (3/3) Tous les chemins ne mènent pas forcément à Rome Emulation d UI Emule le style graphique en utilisant uniquement les fonctions de tracé bas niveau du système Exemple: Qt émule les styles Win32, Motif, etc. sur Win32, Unix, Mac OS, etc. Avantages: Performances Les styles ne sont pas liés au système Héritage et spécialisation des widgets aisé Désavantage: les développeurs de la bibliothèque doivent suivre les modifications de style Kévin Ottens Introduction au développement avec Qt 11/38

Plan 1 Introduction 2 L essentiel de Qt Kévin Ottens Introduction au développement avec Qt 12/38

Plan 2 L essentiel de Qt Concepts clefs Widgets Outils pour le développement Kévin Ottens Introduction au développement avec Qt 13/38

QObject Le père de toute chose... ou presque Fonctionnalités Relation parent/enfant, utile pour Gestion mémoire Visibilité et état des widgets Signaux et slots Introspection Système de propriétés QObject QWidget QComboBox 1 QWidget QTimer QLabel Inconvénients Difficultés pour l héritage multiple 1 QFrame 1 QCheckBox 1 QTcpSocket 1 QPushButton Kévin Ottens Introduction au développement avec Qt 14/38

QObject Le père de toute chose... ou presque Fonctionnalités Relation parent/enfant, utile pour Gestion mémoire Visibilité et état des widgets Signaux et slots Introspection Système de propriétés QObject QWidget QComboBox 1 QWidget QTimer QLabel Inconvénients Difficultés pour l héritage multiple 1 QFrame 1 QCheckBox 1 QTcpSocket 1 QPushButton Kévin Ottens Introduction au développement avec Qt 14/38

QObject Le père de toute chose... ou presque Fonctionnalités Relation parent/enfant, utile pour Gestion mémoire Visibilité et état des widgets Signaux et slots Introspection Système de propriétés QObject QWidget QComboBox 1 QWidget QTimer QLabel Inconvénients Difficultés pour l héritage multiple 1 QFrame 1 QCheckBox 1 QTcpSocket 1 QPushButton Kévin Ottens Introduction au développement avec Qt 14/38

Signaux et Slots (1/5) Le Morse c est dépassé Métaphore Un objet "émet" (emit) un signal pour signifier quelque chose potentiellement intéressant pour l extérieur Un ou plusieurs objets recoivent le signal par une méthode de signature compatible Primitives connect() / disconnect() emit Avantages Couplage faible Programmation événementielle facile Kévin Ottens Introduction au développement avec Qt 15/38

Signaux et Slots (2/5) Le Morse c est dépassé Phare #include <QtCore/QObject> #include <QtCore/QPoint> class Beacon : public QObject { Q_OBJECT signals: void beamoflight(qpoint pos, int degree); }; Kévin Ottens Introduction au développement avec Qt 16/38

Signaux et Slots (3/5) Le Morse c est dépassé Bateau #include <QtCore/QObject> #include <QtCore/QPoint> class Boat : public QObject { Q_OBJECT public slots: void lightspotted(qpoint pos, int degree); }; Kévin Ottens Introduction au développement avec Qt 17/38

Signaux et Slots (4/5) Le Morse c est dépassé Connection Beacon *lighthouse; Boat *tanker; [...] connect(lighthouse, SIGNAL(beamOfLight(QPoint, int)), tanker, SLOT(lightSpotted(QPoint, int))); Kévin Ottens Introduction au développement avec Qt 18/38

Signaux et Slots (5/5) Le Morse c est dépassé void Beacon::rotate(int angle) {... mangle+= angle; emit beamoflight(mposition, mangle);... } void Boat::lightSpotted(const QPoint &pos) {... mlastlightposition = pos;... } lighthouse (20,30),10 (20,30) tanker connect(lighthouse, SIGNAL(beamOfLight(QPoint, int)), tanker, SLOT(lightSpotted(QPoint))); Kévin Ottens Introduction au développement avec Qt 19/38

Partage implicite Ce qui est à toi est à moi... ou presque "Copy on write" Utilisable par valeur operator=() duplique uniquement un pointeur Duplication des données sur écriture Kévin Ottens Introduction au développement avec Qt 20/38

Partage implicite Ce qui est à toi est à moi... ou presque "Copy on write" Utilisable par valeur operator=() duplique uniquement un pointeur Duplication des données sur écriture QString s1 = "foo"; s1 "foo" Kévin Ottens Introduction au développement avec Qt 20/38

Partage implicite Ce qui est à toi est à moi... ou presque "Copy on write" Utilisable par valeur operator=() duplique uniquement un pointeur Duplication des données sur écriture QString s2 = s1; s1 "foo s2 Kévin Ottens Introduction au développement avec Qt 20/38

Partage implicite Ce qui est à toi est à moi... ou presque "Copy on write" Utilisable par valeur operator=() duplique uniquement un pointeur Duplication des données sur écriture s1.append("/bar"); s1 "foo" s2 "foo" Kévin Ottens Introduction au développement avec Qt 20/38

Partage implicite Ce qui est à toi est à moi... ou presque "Copy on write" Utilisable par valeur operator=() duplique uniquement un pointeur Duplication des données sur écriture s1.append("/bar"); s1 "foo/bar" s2 "foo" Kévin Ottens Introduction au développement avec Qt 20/38

Partage implicite Ce qui est à toi est à moi... ou presque "Copy on write" Utilisable par valeur operator=() duplique uniquement un pointeur Duplication des données sur écriture Classes couvertes Images, polygones, chaînes, url, variants, collections... Kévin Ottens Introduction au développement avec Qt 20/38

Partage implicite Ce qui est à toi est à moi... ou presque "Copy on write" Utilisable par valeur operator=() duplique uniquement un pointeur Duplication des données sur écriture (A propos des collections) Tout le nécessaire : QList, QMap, QSet, QMultiMap... Trois styles possibles pour itérer : Itérateurs STL Itérateurs Java foreach() Kévin Ottens Introduction au développement avec Qt 20/38

Plan 2 L essentiel de Qt Concepts clefs Widgets Outils pour le développement Kévin Ottens Introduction au développement avec Qt 21/38

Petit catalogue de widgets (1/3) Ooooh, c est beau! Et il y en a beaucoup... Boutons QCheckBox QRadioButton QPushButton QToolButton QButtonGroup (pas un widget!) Saisie QLineEdit QTextEdit QComboBox QCompleter (pas un widget!) QValidator (pas un widget!) Kévin Ottens Introduction au développement avec Qt 22/38

Petit catalogue de widgets (2/3) Ooooh, c est beau! Et il y en a beaucoup... Affichage QLabel QLCDNumber QTextBrowser Intervals QSlider QDial QScrollBar Q(Double)SpinBox Kévin Ottens Introduction au développement avec Qt 23/38

Petit catalogue de widgets (3/42) Ooooh, c est beau! Et il y en a beaucoup... Et aussi... Gestion des dates et du temps Arranger d autres widgets (splitter, scroll areas...) Constituants de fenêtres principales (menus, tool bars, onglets, docks...) Boites de dialogues (fichiers, couleurs, polices...) Kévin Ottens Introduction au développement avec Qt 24/38

Interview (1/3) Modèle/Vue enfin abordable A propos du MVC Pattern d Architecture Assez simple à comprendre... généralement difficile à mettre en œuvre Applicable pour des widgets complexes, ou des boîtes de dialogue Originalités d Interview Mise en place d une architecture MVC pour les widgets complexes Interface de modèles "générique" (table/liste/arbre) Communication par signaux et slots entre les objets intervenants Kévin Ottens Introduction au développement avec Qt 25/38

Interview (2/3) Modèle/Vue enfin abordable Données Modèle Vue Délégué Modèle/Vue/Délégué Le modèle interface la source de données avec les autres composants La vue demande au modèle les données à afficher Le délégué effectue le rendu conjointement avec la vue, et lors d une édition indique les changements au modèle Toutes les références aux données passent par des instances de QModelIndex Kévin Ottens Introduction au développement avec Qt 26/38

Interview (3/3) Modèle/Vue enfin abordable Classes disponibles QAbstractItemModel : Interface de base pour les modèles QAbstractListModel : Modèles orientés liste QAbstractTableModel : Modèles orientés table QListView : Vue en liste QTableView : Vue en table QTreeView : Vue en arbre QAbstractProxyModel : Interface pour "modèles filtrants" Kévin Ottens Introduction au développement avec Qt 27/38

QGraphicsView Séparation modèle/vue pour le canvas Modèle QGraphicsScene Vue Permet la gestion des objets dans la scène Distribue les événements aux objets et gère leur état QGraphicsItem, objets affichables Texte, lignes, polygônes, pixmap, SVG, etc. Détection de collisions Drag n Drop, événements clavier et souris, etc. Plusieurs vues sur la même scène Chaque vue peut avoir des options de rendu, ou des transformations différentes Kévin Ottens Introduction au développement avec Qt 28/38

Mais aussi... En bref! Scribe : Gestion de texte riche QTextDocument : contenu d un texte en lecture seule Structure hiérarchique QTextBlock, QTextFrame, QTextTable, QTextList QTextCursor permet de manipuler un texte en utilisant la métaphore du curseur QTextEdit : widget d édition de texte Mainwindow : flexibilité dans la fenêtre principale QMainWindow : Fenêtre principale disposant d un menu QToolBar : Barres d outils en bords de fenêtres QDockWidget : Panneaux déplaçables liés à la fenêtre Kévin Ottens Introduction au développement avec Qt 29/38

Plan 2 L essentiel de Qt Concepts clefs Widgets Outils pour le développement Kévin Ottens Introduction au développement avec Qt 30/38

QMake (1/2) Construire c est ma passion... eeeuuh, en fait non Faciliter la portabilité Description des règles de construction d une application Génération de fichiers Makefile ou Visual Studio Possibilité d ajouter des réglages particuliers pour une plateforme donnée Variables importantes TEMPLATE: type de projet (app, lib, subdirs) HEADERS, SOURCES et FORMS: fichiers utilisés pour la construction TARGET: nom du produit construit CONFIG: options de construction (debug, multi-thread...) Kévin Ottens Introduction au développement avec Qt 31/38

QMake (2/2) Construire c est ma passion... eeeuuh, en fait non Un exemple rapide TEMPLATE = app TARGET = seashore_simulator CONFIG HEADERS SOURCES FORMS += qt warn_on release = beacon.h boat.h = main.cpp beacon.cpp boat.cpp = seashoreview.ui Kévin Ottens Introduction au développement avec Qt 32/38

Qt Designer (1/2) Dessiner c est gagner Constats Ecrire l IHM à la main est fastidieux Code résultant souvent lourd à maintenir designer + uic Designer : éditeur graphique d IHM Résultat : fichiers ".ui" uic : tranforme les ".ui" en classes C++ (public:) Approche de travail On ne conserve que les ".ui" Classes générées uniquement pour la construction Incite au MVC Kévin Ottens Introduction au développement avec Qt 33/38

Qt Designer (2/2) Dessiner c est gagner MVC avec Designer :QWidget myview.ui :MyModel :MyControl :MyView MyView est générée par uic à partir de myview.ui MyModel est une classe domaine à afficher ou éditer MyControl écoute les signaux de MyModel et des widgets de MyView Hériter d un QWidget permet en plus d utiliser le contrôle comme élément dans une interface plus complexe Kévin Ottens Introduction au développement avec Qt 34/38

Qt Designer (2/2) Dessiner c est gagner MVC avec Designer :QWidget myview.ui :MyModel :MyControl :MyView MyView est générée par uic à partir de myview.ui MyModel est une classe domaine à afficher ou éditer MyControl écoute les signaux de MyModel et des widgets de MyView Hériter d un QWidget permet en plus d utiliser le contrôle comme élément dans une interface plus complexe Kévin Ottens Introduction au développement avec Qt 34/38

Qt Creator Le tout intégré Kévin Ottens Introduction au développement avec Qt 35/38

Sites Web (Qt) Pour les geeks qui ne lachent pas le clavier Qt Development Frameworks @ Nokia http://qt.nokia.com Qt Online Reference Documentation http://qt.nokia.com/doc Qt fr: Le site Francophone http://www.qtfr.org QtCentre: The Ultimate Qt Community site http://www.qtcentre.org Qt Labs blogs http://labs.qt.nokia.com/blogs Kévin Ottens Introduction au développement avec Qt 36/38

Ateliers KDE Page de publicité Un samedi par mois... Kévin Ottens Introduction au développement avec Qt 37/38

Ateliers KDE Page de publicité Venez participer aux projets de la communauté KDE! Kévin Ottens Introduction au développement avec Qt 37/38

Ateliers KDE Page de publicité Toutes les contributions sont les bienvenues (pas uniquement sous forme de code) Kévin Ottens Introduction au développement avec Qt 37/38

Ateliers KDE Page de publicité Pour chaque Atelier KDE au moins une présentation technique offerte Kévin Ottens Introduction au développement avec Qt 37/38

Ateliers KDE Page de publicité Les Ateliers KDE de Toulibre rendent la bonne humeur et les cheveux soyeux Kévin Ottens Introduction au développement avec Qt 37/38

Questions? Kévin Ottens ervin@kde.org Kévin Ottens Introduction au développement avec Qt 38/38