2013-07-25 10 views
23

Qt 5.0 offre una nuova classe QWindow. Mentre la documentazione su questa classe è abbastanza completa, non riesco a vedere come esattamente lo QWindow sia diverso dalla classe QWidget e in quali casi preferiresti il ​​primo. Entrambi forniscono un modo pratico per visualizzare tutti i tipi di cose sullo schermo, entrambi possono usare QPainter per disegnare ed entrambi hanno un modo per interagire con OpenGL.Qual è la differenza tra QWindow e QWidget

Nel API description, si dice che:

Un'applicazione in genere utilizzare QWidget o QQuickView per la sua interfaccia utente, e non QWindow direttamente.

Quindi non sembra essere un vantaggio per la finestra. Inoltre, afferma:

Windows può potenzialmente utilizzare molta memoria. Una misura abituale è la larghezza, l'altezza e la profondità del colore. Una finestra potrebbe anche includere più buffer per supportare il buffering doppio e triplo, nonché i buffer di profondità e stencil.

Quale non sembra essere a favore dell'utilizzo dello QWindow. Quindi in quali casi lo useresti?

risposta

51

QWindow è stato introdotto in Qt 5.0 a causa della suddivisione gui/widget. QWidget ora vive nella sua libreria (QtWidgets); è stato necessario fornire l'astrazione di una "finestra di livello superiore" per le applicazioni basate su non widget, quindi è stato creato QWindow e vive nello QtGui.

C'è un'intera classe di applicazioni basate su non widget: tutte quelle che utilizzano QtQuick2. Non utilizzano affatto la libreria QtWidget e, in effetti, quando li si utilizza, si utilizza sempre in modo esplicito QWindows (QQuickView eredita da QWindow).

Anche quando si utilizza widget, QWindows di alto livello vengono creati per voi dal kernel Qt, che mantiene anche le proprietà e le bandiere di tali oggetti QWindow in sincronia con i corrispondenti QWidgets di alto livello. In questo modo puoi occuparti solo di widget come hai sempre fatto, senza sapere nulla di QWindow. Le applicazioni esistenti continueranno a funzionare come previsto, ecc ecc

L'unica ragione (finora) Sto usando QWindow s esplicitamente è per una molto specifico caso d'uso: disegnare puro contenuto OpenGL. Questo è molto facile da realizzare (impostando un tipo di superficie OpenGL sulla finestra) ed evita di introdurre dipendenze aggiuntive (QtWidgets, QtOpenGL, ecc., Che hanno un costo in termini di dimensioni della libreria); consente di creare una superficie di disegno OpenGL come 10 linee di codiceche funzionerà su Linux, Windows, Mac, QNX, "Linux incorporato" e molto probabilmente anche su Android e iOS. Da questo punto di vista si comporta come una perfetta sostituzione SDL. :)

+1

dove posso trovare qualche esempio a riguardo? – nkint

+1

Questa è una risposta eccellente. È come la madre di tutte le risposte. Complimenti! –

Problemi correlati