Qt Platform Abstraction

15
Qt Platform Abtraction Gianni Valdambrini ([email protected]) Nokia Certified Qt Specialist

description

Questo talk presenterà l'architettura di QPA (ex Lighthouse Project) e come questo consente agli sviluppatori di portare facilmente Qt su sistemi diversi.

Transcript of Qt Platform Abstraction

Page 1: Qt Platform Abstraction

Qt Platform Abtraction

Gianni Valdambrini ([email protected])Nokia Certified Qt Specialist

Page 2: Qt Platform Abstraction

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)…

Page 3: Qt Platform Abstraction

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

Page 4: Qt Platform Abstraction

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

Page 5: Qt Platform Abstraction

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

Page 6: Qt Platform Abstraction

6

QPlatformIntegration

Classe factory → costruisce le classi che implementano le funzionalità richieste dal codice (cross-platform) Qt

Page 7: Qt Platform Abstraction

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();};

Page 8: Qt Platform Abstraction

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

Page 9: Qt Platform Abstraction

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

Page 10: Qt Platform Abstraction

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

Page 11: Qt Platform Abstraction

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/... ...

Page 12: Qt Platform Abstraction

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

Page 13: Qt Platform Abstraction

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

Page 14: Qt Platform Abstraction

14

Domande?

??

Page 15: Qt Platform Abstraction

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