3. 3
Qt5 : Quesako ?!
– Prononcé : /kju t/ Cute et non pas QTː →
– Première version en 1996 (trolltech) Achat par Nokia en 2008 Qt5 en 2012 (Digia)→ →
– Pour créer des GUI mais pas que …
●
Différentiation au fil des releases (port série, bus CAN, Network, …)
– Un ensemble de librairies et d'outils
●
On parlera de framework !
– Cross Platform
4. 4
Qt5 : Architecture
Architecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt Concurrent
Qt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
5. 5
Qt5 : Architecture
Architecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt Concurrent
Qt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique de base : le core !
6. 6
Qt5 : Architecture
Architecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt Concurrent
Qt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique IHM !
7. 7
Qt5 : Architecture
Architecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt Concurrent
Qt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique pour l'intégration
des bases de données
8. 8
Qt5 : Architecture
Architecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt Concurrent
Qt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique d'abstraction pour
la programmation réseau (UDP, TCP, ...)
9. 9
Qt5 : Architecture
Architecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt Concurrent
Qt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
Brique pour la gestion
dynamique et la customisation
d'interface
10. 10
Qt5 : Architecture
Architecture Qt5
Essentials
Qt GUI
Add-ons
...
Qt Core
Qt Concurrent
Qt D-Bus
Qt 3D
Qt NFC
Qt Serial Port
Qt Bluetooth
Qt SVG
Qt Location
Qt Serial Bus
Qt Multimedia Widgets
Qt Multimedia Qt QML Qt Quick
Qt Network
Qt Quick Controls
Qt SQL
...
Tools
Qt Designer
Qt Creator
...
11. 11
Qt5 : Architecture
– Qt n'utilise pas d'autotools mais un outils « maison » qmake
●
Il faut donc l'adapter pour du développement croisée
● Tout se passe dans le répertoire mkspecs :
– Raspberry-pi (1/2/3)
– i.MX6 – i.MX7
– Jetson TK1
– ...
●
Fichiers :
– qmake.conf
– qplatformdefs.h
Options du compilateur,
backend graphique, ...
Définition de la
plateforme (#include,
#define)
Automatise la génération
de Makefile (*.pro)
12. 12
Qt5 : les +
●
L'aspect affichage (QWS → QPA) : Plus de notion de Client/Serveur Couche d'abstraction plus au niveau (+ de plate-→
formes)
– Depuis Qt5 → QPA = devices/OS abstraction (meilleure gestion des plateformes et systèmes de fenêtrage)
– L'affichage en lui-même linuxFB (quand pas de GPU), EGLFS, Wayland, ...→
●
Exemple :
$ ./myqt5app platform linuxfb (par défaut : /dev/fb0)
$ ./myqt5app platform linuxfb:fb=/dev/fb2
ou encore
$ ./myqt5app platform eglfs
13. 13
Qt5 : les +
L'aspect event (souris, clavier, tactile)
– Plugin Input
● evdev Au travers du pilote noyau :→ /dev/input/event*
Helpers :
– libinput, (alternative au plugin evdev de Qt)
– tslib, pour du résistif par exemple
● Calibration via l'utilitaire ts_calibrate
●
Fichier de calibration dans /etc pointercal→
– evedevtouch (pour le multi-touch)
14. 14
Qt5 : les +
●
Exemple :
$ ./myqt5app platform linuxfb plugin evedevtouch
●
Pour EGLFS (sans libinput)
– Exemple : QT_QPA_PLATFORM=eglfs
– On passera par les variables d'env :
●
QT_QPA_EVDEV_MOUSE_PARAMETERS,
●
QT_QPA_EVDEV_KEYBOARD_PARAMETERS,
●
QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS
– Exemple :
QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0
●
Pour logger les « event » :
export QT_LOGGING_RULES=qt.qpa.*=true
15. 15
Qt5 : Compilation de Qt 1/2
●
Les besoins :
– Une « cross-toolchain » => ct-ng, Linaro, Build-system, ...
– un sysroot => Le root filesystem
●
Choix de la cible :
$ ls l <qtsources>/qtbase/mkspecs/devices/
● Prenons l'exemple pour linuximx6g++
●
L'étape du « configure » => mais aucun rapport avec les Autotools !
$ ./configure v release
device linuximx6g++
deviceoption CROSS_COMPILE=<toolchainpath>
sysroot <rootfspath>
prefix <installpath>
16. 16
Qt5 : Compilation de Qt 2/2
Configure summary
Building on: linuxg++ (x86_64, CPU features: mmx sse sse2)
Building for: devices/linuximx6g++ (arm, CPU features: neon)
QPA backends:
...
EGLFS ................ yes
EGLFS i.MX6 ........ yes
EGLFS i.MX6 Wayland. no
EGLFS EGLDevice .... no
...
EGLFS Raspberry Pi . no
LinuxFB .............. yes
...
●
Et pour compiler !!!! Il suffit de lancer la commande de compilation→
– $ make j(nb processors)
– $ make install
18. 18
Qt5 : QtCreator
●
Périphérique de déploiement : « permet de déployer le binaire sur la cible » (sftp)
●
Dans le .pro :
target.path= /usr/bin
INSTALLS += target
●
Test de communication
Where ?
20. 20
Qt5 : Build System
●
Yocto/Open Embedded
– Intégration de la metaqt5 (fichier bblayers.conf)
→ https://github.com/meta-qt5/meta-qt5
– Pour générer une toochain générique :
$ bitbake metatoolchainqt5
●
Aura pour effet de générer un sdk relogeable (32 bits ou 64 bits)
– On pourra intégrer les éléments à l'image de cette manière :
IMAGE_INSTALL += "
qtbase qtconnectivity
"
21. 21
Démo 1 : présentation
●
WaRP7 en mode AP (Access point) :
– Dnsmasq pour l'attribution des IP
– Hostapd pour la configuration du point d'accès (ssid=warp7 / passphrase=iotonwarp7)
QHostAddress::Broadcast
22. 22
Démo 1 : fichier .pro
QT += core network
QT -= gui
TEMPLATE = app
TARGET = WaRP7_Broadcast
CONFIG += console
SOURCES += main.cpp
CWaRP7Broadcast.cpp
HEADERS +=
CWaRP7Broadcast.h
target.path= /usr/bin
INSTALLS += target
Nos module
GUI ?!
Makefile pour application
La cible, notre binaire !
Chemin d'installation sur la cible
Fichiers du projet