[Tutorial Qt] Come mantenere costanti le dimensioni di font e oggetti

Android Qt
Android Qt
Android Qt

Con il nuovo Qt 5.2 ho iniziato a testare le mie applicazioni “desktop” anche su dispositivi mobili Android. Qt sicuramente semplifica tutta la procedura di cross-compilazione e di deploy e ti permette di programmare facilmente in C++ per i dispositivi mobili, ma c’è un grosso problema e si riassume brevemente con una parola: “DPI”.

I dispositivi Android hanno differenti risoluzioni del display e differenti grandezze, ciò comporta una differente densità di pixel “reali” per ogni pollice di schermo (per l’appunto “dpi”, dot per inches).
Facendo dei test mi sono ritrovato ad avere label e widget piccolissimi su schermi piccoli (pensate a un Google Nexus 5 con schermo Full HD su quasi 5” di schermo, 445 dpi reali) e label e widget enormi su schermi grandi (test sul buon vecchio Samsung Galaxy Tab da 7 pollici con risoluzione WSVGA).

Android inoltre complica le cose in quanto generalizza le possibili densità dei pixel su schermo in 4 categorie:

Screen sizes: small, normal, large, xlarge
Densities: ldpi (120 dpi), mdpi (160 dpi), hdpi (240 dpi), xhdpi (320 dpi)

[Questo articolo spiega in maniera esauriente l’argomento: “Multiple Screen Sizes With Processing for Android“]

Per risolvere il problema ho utilizzato una funzione molto comoda che Qt mette a disposizione: physicalDotsPerInch, dalla classe QScreen.
Il codice è contenuto in una piccola classe che ho appositamente creato: QScreenTools

QScreenTools.h

QScreenTools.cpp

Come avrete notato il codice è molto semplice: nel costruttore physicalDotsPerInch è invocata per inizializzare la variabile chiave mDpi.

Le due funzioni cvtMm2PxcvtInch2Px hanno invece la funzione utile di convertire una misura in millimetri o in pollici in pixel effettivi sullo schermo utilizzato.

Potete trovare un’applicazione del codice nel software “RobotGUI” disponibile su Github, si tratta di una semplice console di controllo remoto che sto attualmente realizzando per il mio MyzharBot.

RobotGUI

RobotGUI

Lascia un Commento

This site uses cookies. Find out more about this site’s cookies.
%d bloggers like this: