Qt Platform Abstraction
description
Transcript of Qt Platform Abstraction
Qt Platform Abtraction
Gianni Valdambrini ([email protected])Nokia Certified Qt Specialist
2
Il problema
Qt4 era un framework per lo sviluppo di Gui cross-platform, ma i suoi internals contenevano molto codice specifico di una piattaforma o di un'altra.
In quella situazione c'era un sacco di codice duplicato ed era molto complicato fare un nuovo port di Qt.
#if defined (Q_WS_X11)…#elif defined (Q_WS_MAC)…#elif defined (Q_WS_WIN)…
3
La nascita di Lighthouse
Cos'era Lighthouse:
un esperimento dei Qt Labs, un nuovo port di Qt
Il successore di Qt per embedded linux (QWS), molto potente ma scomodo
un set di API ben definito per rendere QtGui window system agnostic
4
Qt Platform Abstraction
Lighthouse integrato in Qt 4.8 → Qt Platform Abstraction
QWS (Qt Window System) vs QPA
QWS QPA
Plugin API per realizzare il proprio Qt port
Si, ma complesso Si
Windowing system Si Esterno
OpenGL Si, ma con limitazioni Si
5
Qt Abstraction Platform
QPA implementa un set di API, utilizzabile mediante la scrittura di plugin, che implementano l'interfaccia QplatformIntegration
Principali plugin disponibili in Qt 4.8: directfb
linuxfb
minimal
qvfb
vnc
wayland
xcb
6
QPlatformIntegration
Classe factory → costruisce le classi che implementano le funzionalità richieste dal codice (cross-platform) Qt
7
QPlatformIntegration
class QPlatformIntegration{public:// GraphicsSystem functions Virtual QPixmapData *createPixmapData(...) = 0; Virtual QPlatformWindow *createPlatformWindow(...) = 0; Virtual QWindowSurface *createWindowSurface(...) = 0;
// Window System functions virtual QList<QPlatformScreen *> screens() = 0;
// Deeper window system integrations virtual QPlatformFontDatabase *fontDatabase();};
8
QPlatformIntegration: le classi
QPlatformScreen → rappresenta lo schermo vero e proprio e ne gestisce l'eventuale inizializzazione
QPlatformWindow → è la rappresentazione della finestra stessa e l'interfaccia con il window manager
QWindowSurface → gestisce il contenuto della finestra e il disegno vero e proprio
9
QPlatformIntegration: le classi
QPixmapData → rappresenta l'implementazione di una QPixmap e contiene i dati veri e propri
Alcune specializzazioni già disponibili: QRasterPixmapData, QGlPixmapData, QBlittablePixmapData
QPlatformFontDatabase → è l'interfaccia per il font database della propria piattaforma
Alcune specializzazioni già pronte:QFontconfigDatabase, QBasicUnixFontDatabase, QGenericUnixFontDatabase
10
Un esempio “minimale”
Plugin minimal
Mostra quale è il minimo quantitativo di codice necessario per scrivere un plugin per QPA
Reimplementa QPlatformScreen e QWindowSurface per scrivere pixel su un'immagine
11
QWindowSystemInterface
Classe che copre l'altra direzione: piattaforma → Qt
E' composta da una serie di funzioni statiche threadsafe che possono essere chiamate dal proprio plugin per QPA
Gestisce i vari eventi provenienti dal sistema:
Mouse, tastiera, touchscreen Window close/enter/leave/... ...
12
Nuove piattaforme
iOs
uikit → plugin proof of concept per qpa Ufficialmente non sarà supportato, e a causa di
problemi di licenza e deploy probabilmente non sarà mai un porting completo
Android
Non ufficialmente supportato ma ha le potenzialità per divenire un porting completo
Necessitas → progetto esterno che porta Qt su Android fornendo anche un ambiente di sviluppo completo
13
Nuove piattaforme
Google Native Client
Progetto sperimentale (al momento) che porta le Qt all'interno di Chrome/Chromium
http://developer.qt.nokia.com/wiki/Qt_for_Google_Native_Client
14
Domande?
??
GRAZIE !GRAZIE !
Contatti
Mail: [email protected]
Phone: +39-055-3984627
Fax: +39 178 6003614
http://www.develer.com
Develer S.r.l.Via Mugellese 1/A
50013 Campi BisenzioFirenze - Italia