2014-07-05 4 views
5

Quando ho sfogliato il codice sorgente di Qt non ho trovato il modo in cui effettivamente disegna un componente della GUI, ma so che usa OpenGL.In che modo Qt disegna i componenti della GUI (idea di base)?

Voglio sapere come fa una libreria GUI come Qt a disegnare i suoi componenti della GUI (es: QPushButton, QWidget)?

Qualcuno può aiutarmi con un'idea di base?

+0

Sono abbastanza sicuro che fa solo chiamate al sistema operativo. Dipende dal sistema operativo o meno se è effettivamente accelerato dall'hardware. Altre parti di Qt usano direttamente OpenGL. – Ben

risposta

4

Nel sito Qt-progetto:

Qt è QtWidgets pittura utilizzando QPainter, che utilizza (di solito) il motore raster per disegnare il contenuto. Non sta utilizzando chiamate del sistema operativo nativo, tranne alcune eccezioni (ad esempio, la finestra di dialogo dei file, che può essere disegnata in modo nativo o utilizzando QtWidgets).

QtQuick è dipinto utilizzando scenegraph, quindi OpenGL. Inoltre, nessuna chiamata OS nativa qui.

Penso che o abbiate frainteso (ci sono diversi significati della parola "nativo" in informatica) il post StackOverflow, o la vostra fonte di informazione è sbagliata.

OK, quindi per essere chiari: con "nativo" intendevo utilizzare i controlli OS nativi, come fa la libreria wxWidgets: chiedere al sistema operativo di disegnare una barra di scorrimento nativa, una casella combinata, ecc. Qt non lo fa. Dipinge tutti i widget stessi e cerca solo di imitare l'aspetto del sistema operativo su cui è in esecuzione.

Ma ovviamente, una sorta di chiamata del sistema operativo nativo sta avvenendo in profondità, al fine di disegnare effettivamente alcuni pixel sullo schermo e aprire il contenitore della finestra nativa. Ma questo di solito non è importante per gli sviluppatori dell'interfaccia utente di alto livello.

Hai una scelta chiara se il widget deve essere disegnato dalla CPU o dalla GPU: i widget possono utilizzare diversi metodi di pittura (nativo, raster, OpenGL, per ulteriori informazioni vedi here! [Qt-project.org]), e l'utente ha scelta quale dovrebbe essere utilizzato. La maggior parte delle persone non lo usa, perché le impostazioni predefinite funzionano bene.

Grazie.

Problemi correlati