Oggi trattiamo una tematica è sempre un po’ ostica anche per programmatori esperti di QML: come faccio a sapere dove sono i miei Item su schermo?

Rettangoli, rettangoli, rettangoli!

Quando scriviamo del codice che ha a che fare con oggetti visuali che cambiano posizione o opacità, abbiamo la necessità di sapere dove sono questi oggetti e che dimensioni hanno. In questi casi una tecnica di debug molto semplice, ma più efficace di stampare la posizione dei vari oggetti su console, è quella di inserire un rettangolo colorato all’interno dell’oggetto che vogliamo visualizzare et voilà! Otteniamo una bella macchia colorata che ci indica la posizione del nostro oggetto.

Nel caso in cui la macchia non si veda, possiamo controllare alcune cose:

È possibile anche impostare l’opacità del rettangolo a qualcosa < 1 nel caso in cui si debbano controllare le posizioni relative di più componenti.

Radiografia dell’applicazione

Se la nostra applicazione è stata sviluppata con Qt Widgets oppure con QtQuick (solo però a partire da Qt 5.2), possiamo sfruttare GammaRay, un software che, data un’applicazione Qt sia essa basata su widget o Qt Quick, permette di analizzare a fondo la struttura degli oggetti. Ecco alcune cose che possiamo visualizzare:

GammaRay è un’applicazione open source e si può scaricare da GitHub.

Performance e disegno

L’ultima risorsa per analizzare il layout degli oggetti e le performance dell’applicazione è la variabile di ambiente QSG_VISUALIZE. Impostando questa variabile si possono visualizzare vari aspetti legati al renderer QML. L’impostazione più utile quando non sappiamo dove sono gli Item è

Render QML
QSG_VISUALIZE = overdraw

In questo screenshot vediamo le linee blu che rappresentano la vista QML, mentre i vari layer sono rappresentati in verde o rosso. Questo rendering viene fatto in automatico sopra la GUI e consente di scoprire se ci sono elementi fuori della vista, se ci sono Item sovrapposti e così via.