2013-07-25 1 views
23

Der Qt 5.0 bietet eine neue QWindow Klasse. Während die Dokumentation zu dieser Klasse ziemlich umfassend ist, kann ich nicht sehen, wie genau sich die QWindow von der QWidget Klasse unterscheidet, und in welchen Fällen würden Sie ersteres bevorzugen. Beide bieten eine praktische Möglichkeit, alle möglichen Dinge auf dem Bildschirm zu visualisieren, beide können QPainter zum Zeichnen verwenden, und beide haben eine Möglichkeit, mit OpenGL zu interagieren.Was ist der Unterschied zwischen einem QWindow und QWidget

Im API description, heißt es, dass:

Eine Anwendung in der Regel QWidget oder QQuickView für seine Benutzeroberfläche verwenden, und nicht direkt Qwindow.

Das scheint also kein Vorteil für das Fenster zu sein. Darüber hinaus heißt es:

Windows kann möglicherweise viel Speicher verwenden. Ein übliches Maß ist Breite mal Höhe mal Farbtiefe. Ein Fenster kann auch mehrere Puffer enthalten, um Doppel- und Dreifachpufferung sowie Tiefen- und Schablonenpuffer zu unterstützen.

Was scheint nicht für die Verwendung der QWindow zu sein. Also, in welchen Fällen würdest du es benutzen?

Antwort

51

QWindow wurde in Qt 5.0 aufgrund der gui/widgets-Aufteilung eingeführt. QWidget lebt jetzt in einer eigenen Bibliothek (QtWidgets); Es war notwendig, die Abstraktion eines "Toplevel-Fensters" für Nicht-Widgets-basierte Anwendungen bereitzustellen, und somit wurde QWindow erstellt - und lebt in QtGui.

Es gibt eine ganze Klasse von Nicht-Widgets basierten Anwendungen: alle diejenigen, die QtQuick2 verwenden. Sie verwenden die QtWidget-Bibliothek überhaupt nicht, und tatsächlich verwenden Sie bei der Verwendung von QWindows immer explizit (QQuickView erbt von QWindow).

Auch bei Verwendung von Widgets, Top-Level-QWindows erhält für Sie durch den Qt-Kernel erstellt, die auch die Eigenschaften und die Flaggen solcher Qwindow Objekte synchron mit den entsprechenden Top-Level-QWidgets halten. Auf diese Weise können Sie mit Widgets arbeiten, wie Sie es immer getan haben, ohne überhaupt etwas über QWindow zu wissen. Bestehende Anwendungen werden weiterhin wie erwartet laufen, etc. etc.

Der einzige Grund, (bisher) Ich habe mit QWindow s explizit für einen ganz bestimmten Anwendungsfall ist: reine OpenGL Inhalt zu zeichnen. Dies ist sehr einfach zu erreichen (durch Festlegen eines OpenGL-Oberflächentyps im Fenster) und vermeidet, dass Sie zusätzliche Abhängigkeiten (QtWidgets, QtOpenGL usw., die hinsichtlich der Bibliotheksgröße Kosten verursachen) einbinden; ermöglicht es, eine OpenGL Zeichenfläche in 10 Zeilen Codezu erstellen, die unter Linux, Windows, Mac, QNX, "Embedded Linux" und sehr wahrscheinlich auch Android und iOS funktionieren. Von diesem Standpunkt aus fungiert es als perfekter SDL-Ersatz. :)

+1

wo finde ich ein Beispiel dazu? – nkint

+1

Dies ist eine ausgezeichnete Antwort. Es ist wie die Mutter aller Antworten. Kudos! –

Verwandte Themen