Ответ 1
QWindow
был введен в Qt 5.0 из-за разделения gui/widgets. QWidget
теперь живет в своей собственной библиотеке (QtWidgets
); необходимо было предоставить абстракцию "верхнего окна" для приложений, не связанных с виджетами, и, таким образом, QWindow
был создан - и живет в QtGui
.
Существует целый класс приложений, не связанных с виджетами: все, кто использует QtQuick2. Они вообще не используют библиотеку QtWidget, и, по сути, при их использовании вы всегда как-то используете QWindows явно (QQuickView
наследует от QWindow
).
Даже при использовании виджетов QWindows верхнего уровня создается для вас ядром Qt, который также сохраняет свойства и флаги таких объектов QWindow в синхронизации с соответствующими QWidgets верхнего уровня. Таким образом, вы можете просто иметь дело с виджетами, которые вы всегда делали, не зная о QWindow. Существующие приложения будут продолжать работать, как ожидалось, и т.д. И т.д.
Единственная причина, по которой я использовал QWindow
явно, - это очень конкретный прецедент: , чтобы нарисовать чистый контент OpenGL. Этого очень легко достичь (установив тип поверхности OpenGL в окне) и избегайте использования дополнительных зависимостей (QtWidgets, QtOpenGL и т.д., Которые имеют стоимость с точки зрения размера библиотеки); позволяет создать поверхность рисования OpenGL в виде 10 строк кода, которые будут работать на Linux, Windows, Mac, QNX, "встроенной Linux" и, скорее всего, на Android и iOS. С этой точки зрения он выступает в качестве идеальной замены SDL.:)