Qt Platform Abstraction

Post on 19-May-2015

968 views 0 download

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

Qt Platform Abtraction

Gianni Valdambrini (aleister@develer.com)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: info@develer.com

Phone: +39-055-3984627

Fax: +39 178 6003614

http://www.develer.com

Develer S.r.l.Via Mugellese 1/A

50013 Campi BisenzioFirenze - Italia