SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
Qt Platform Abtraction




Gianni Valdambrini (aleister@develer.com)
        Nokia Certified Qt Specialist
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.

    #if defined (Q_WS_X11)
    …
    #elif defined (Q_WS_MAC)
    …
    #elif defined (Q_WS_WIN)
    …

   In quella situazione c'era un sacco di codice duplicato
    ed era molto complicato fare un nuovo port di Qt.




                                                              2
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




                                                              3
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
                                      Si, ma complesso          Si
            proprio Qt port

          Windowing system                    Si              Esterno


               OpenGL                Si, ma con limitazioni     Si


                                                                        4
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

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




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



                                                       7
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



                                                          8
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
                                                          9
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




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



                                                           11
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

                                                               12
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




                                                           13
Domande?




?          14
GRAZIE !
                                Develer S.r.l.
                             Via Mugellese 1/A
                         50013 Campi Bisenzio
                                Firenze - Italia




Contatti
Mail: info@develer.com
Phone: +39-055-3984627
Fax: +39 178 6003614
http://www.develer.com

Contenu connexe

Similaire à Qt Platform Abstraction

Ubuntu Touch: Sviluppo App e Convergenza
Ubuntu Touch: Sviluppo App e ConvergenzaUbuntu Touch: Sviluppo App e Convergenza
Ubuntu Touch: Sviluppo App e ConvergenzaGiulio Collura
 
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1Alfonso Martino
 
Hybrid development using Qt webkit
Hybrid development using Qt webkitHybrid development using Qt webkit
Hybrid development using Qt webkitDeveler S.r.l.
 
Qt Mobile: Sviluppo mobile con Python e Qt Framework
Qt Mobile: Sviluppo mobile con Python e Qt FrameworkQt Mobile: Sviluppo mobile con Python e Qt Framework
Qt Mobile: Sviluppo mobile con Python e Qt FrameworkAndrea Grandi
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker dotnetcode
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerLuca Congiu
 
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMwareSistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMwareClaudio Cardinali
 
Qt mobile PySide bindings
Qt mobile PySide bindingsQt mobile PySide bindings
Qt mobile PySide bindingsPyCon Italia
 
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneGiulio Collura
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziareDaniele Mondello
 
Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer S.r.l.
 
Tecnologie di virtualizzazione per il consolidamento dei server
Tecnologie di virtualizzazione per il consolidamento dei serverTecnologie di virtualizzazione per il consolidamento dei server
Tecnologie di virtualizzazione per il consolidamento dei serverTruelite
 
Da Zero all'open per PA e PMI
Da Zero all'open per PA e PMIDa Zero all'open per PA e PMI
Da Zero all'open per PA e PMINaLUG
 
Monitoraggio della rete con cacti
Monitoraggio della rete con cactiMonitoraggio della rete con cacti
Monitoraggio della rete con cactidalegiuseppe
 
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgetsPietro Lerro
 
Claudio Cardinali - Virtualizzazione. Di tutti. Per tutti. - LINUX LTSP KVM S...
Claudio Cardinali - Virtualizzazione. Di tutti. Per tutti. - LINUX LTSP KVM S...Claudio Cardinali - Virtualizzazione. Di tutti. Per tutti. - LINUX LTSP KVM S...
Claudio Cardinali - Virtualizzazione. Di tutti. Per tutti. - LINUX LTSP KVM S...Claudio Cardinali
 

Similaire à Qt Platform Abstraction (20)

Ubuntu Touch: Sviluppo App e Convergenza
Ubuntu Touch: Sviluppo App e ConvergenzaUbuntu Touch: Sviluppo App e Convergenza
Ubuntu Touch: Sviluppo App e Convergenza
 
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
MuleSoft Meetup Roma - Runtime Fabric Series (From Zero to Hero) - Sessione 1
 
Hybrid development using Qt webkit
Hybrid development using Qt webkitHybrid development using Qt webkit
Hybrid development using Qt webkit
 
Qt Mobile: Sviluppo mobile con Python e Qt Framework
Qt Mobile: Sviluppo mobile con Python e Qt FrameworkQt Mobile: Sviluppo mobile con Python e Qt Framework
Qt Mobile: Sviluppo mobile con Python e Qt Framework
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
 
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMwareSistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
Sistemi di Virtualizzazione con Gnu/Linux Xen vs VMware
 
Conferenza Pymaemo
Conferenza PymaemoConferenza Pymaemo
Conferenza Pymaemo
 
Qt mobile PySide bindings
Qt mobile PySide bindingsQt mobile PySide bindings
Qt mobile PySide bindings
 
Ubuntu Phone: the community smartphone
Ubuntu Phone: the community smartphoneUbuntu Phone: the community smartphone
Ubuntu Phone: the community smartphone
 
Vagrant e Docker a confronto;scegliere ed iniziare
Vagrant e  Docker a confronto;scegliere ed iniziareVagrant e  Docker a confronto;scegliere ed iniziare
Vagrant e Docker a confronto;scegliere ed iniziare
 
Introduzione a .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
 
Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione
 
Develer - Qt Embedded - Intro
Develer - Qt Embedded - IntroDeveler - Qt Embedded - Intro
Develer - Qt Embedded - Intro
 
Tecnologie di virtualizzazione per il consolidamento dei server
Tecnologie di virtualizzazione per il consolidamento dei serverTecnologie di virtualizzazione per il consolidamento dei server
Tecnologie di virtualizzazione per il consolidamento dei server
 
Da Zero all'open per PA e PMI
Da Zero all'open per PA e PMIDa Zero all'open per PA e PMI
Da Zero all'open per PA e PMI
 
Da 0 all'open per PA e PMI
Da 0 all'open per PA e PMIDa 0 all'open per PA e PMI
Da 0 all'open per PA e PMI
 
Monitoraggio della rete con cacti
Monitoraggio della rete con cactiMonitoraggio della rete con cacti
Monitoraggio della rete con cacti
 
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgets
 
Claudio Cardinali - Virtualizzazione. Di tutti. Per tutti. - LINUX LTSP KVM S...
Claudio Cardinali - Virtualizzazione. Di tutti. Per tutti. - LINUX LTSP KVM S...Claudio Cardinali - Virtualizzazione. Di tutti. Per tutti. - LINUX LTSP KVM S...
Claudio Cardinali - Virtualizzazione. Di tutti. Per tutti. - LINUX LTSP KVM S...
 

Plus de QT-day

EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...QT-day
 
Qt Networking avanzato
Qt Networking avanzatoQt Networking avanzato
Qt Networking avanzatoQT-day
 
Qt Concurrent
Qt ConcurrentQt Concurrent
Qt ConcurrentQT-day
 
Qt Creator, l'arma segreta!
Qt Creator, l'arma segreta!Qt Creator, l'arma segreta!
Qt Creator, l'arma segreta!QT-day
 
Internazionalizza le tue applicazioni
Internazionalizza le tue applicazioniInternazionalizza le tue applicazioni
Internazionalizza le tue applicazioniQT-day
 
Home automation con BTicino MyHome
Home automation con BTicino MyHomeHome automation con BTicino MyHome
Home automation con BTicino MyHomeQT-day
 
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...QT-day
 
Welcome - Introduzione - Burkhard Stubert
Welcome - Introduzione - Burkhard StubertWelcome - Introduzione - Burkhard Stubert
Welcome - Introduzione - Burkhard StubertQT-day
 
Contribuire al Qt Project
Contribuire al Qt ProjectContribuire al Qt Project
Contribuire al Qt ProjectQT-day
 
Qt & Webkit
Qt & WebkitQt & Webkit
Qt & WebkitQT-day
 
Qtday Introduzione a qt quick
Qtday  Introduzione a qt quickQtday  Introduzione a qt quick
Qtday Introduzione a qt quickQT-day
 
Develer offering for Qt
Develer offering for QtDeveler offering for Qt
Develer offering for QtQT-day
 

Plus de QT-day (12)

EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
 
Qt Networking avanzato
Qt Networking avanzatoQt Networking avanzato
Qt Networking avanzato
 
Qt Concurrent
Qt ConcurrentQt Concurrent
Qt Concurrent
 
Qt Creator, l'arma segreta!
Qt Creator, l'arma segreta!Qt Creator, l'arma segreta!
Qt Creator, l'arma segreta!
 
Internazionalizza le tue applicazioni
Internazionalizza le tue applicazioniInternazionalizza le tue applicazioni
Internazionalizza le tue applicazioni
 
Home automation con BTicino MyHome
Home automation con BTicino MyHomeHome automation con BTicino MyHome
Home automation con BTicino MyHome
 
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
EBV e Freescale: cosa possono fare per lo sviluppo delle vostre applicazioni ...
 
Welcome - Introduzione - Burkhard Stubert
Welcome - Introduzione - Burkhard StubertWelcome - Introduzione - Burkhard Stubert
Welcome - Introduzione - Burkhard Stubert
 
Contribuire al Qt Project
Contribuire al Qt ProjectContribuire al Qt Project
Contribuire al Qt Project
 
Qt & Webkit
Qt & WebkitQt & Webkit
Qt & Webkit
 
Qtday Introduzione a qt quick
Qtday  Introduzione a qt quickQtday  Introduzione a qt quick
Qtday Introduzione a qt quick
 
Develer offering for Qt
Develer offering for QtDeveler offering for Qt
Develer offering for Qt
 

Qt Platform Abstraction

  • 1. 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. #if defined (Q_WS_X11) … #elif defined (Q_WS_MAC) … #elif defined (Q_WS_WIN) …  In quella situazione c'era un sacco di codice duplicato ed era molto complicato fare un nuovo port di Qt. 2
  • 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 3
  • 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 Si, ma complesso Si proprio Qt port Windowing system Si Esterno OpenGL Si, ma con limitazioni Si 4
  • 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 5
  • 6. QPlatformIntegration  Classe factory → costruisce le classi che implementano le funzionalità richieste dal codice (cross-platform) Qt 6
  • 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(); }; 7
  • 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 8
  • 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 9
  • 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 10
  • 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/...  ... 11
  • 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 12
  • 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 13
  • 15. GRAZIE ! Develer S.r.l. Via Mugellese 1/A 50013 Campi Bisenzio Firenze - Italia Contatti Mail: info@develer.com Phone: +39-055-3984627 Fax: +39 178 6003614 http://www.develer.com