Qt 5.0提供了一个新的QWindow
类。虽然这个类的文档非常全面,但我没有看到QWindow
与QWidget
类的确切区别,以及在哪种情况下你更喜欢前者。两者都提供了一种方便的方式来将各种事物可视化到屏幕上,两者都可以使用QPainter
进行绘制,并且两者都有一种与OpenGL交互的方式。
在API description中,它说:
应用程序通常会将QWidget或QQuickView用于其UI,而不是直接使用QWindow。
所以这似乎不是窗口的优势。此外,它声明:
Windows可能会占用大量内存。通常的测量是宽度乘以高度乘以颜色深度。窗口可能还包括多个缓冲区以支持双缓冲和三缓冲,以及深度和模板缓冲区。
似乎不赞成使用QWindow
。那么在什么情况下你会使用它?
答案 0 :(得分:64)
QWindow
。 QWidget
现在住在自己的图书馆(QtWidgets
);有必要为非基于小部件的应用程序提供“顶层窗口”的抽象,从而创建QWindow
- 并且生活在QtGui
。
有一整套非基于小部件的应用程序:所有使用QtQuick2的应用程序。他们根本不使用QtWidget库,事实上,在使用它们时,你总是以某种方式明确地使用QWindows(QQuickView
继承自QWindow
)。
即使使用小部件,Qt内核也会为您创建顶级QWindows,这也会使此类QWindow对象的属性和标志与相应的顶级QWidgets保持同步。这样你就可以像往常一样处理小部件,而根本不知道QWindow。现有的应用程序将继续按预期运行等等。
我一直在使用QWindow
的唯一原因(到目前为止)是一个非常具体的用例:来绘制纯OpenGL内容。这很容易实现(通过在窗口上设置OpenGL表面类型),并避免引入额外的依赖项(QtWidgets,QtOpenGL等,这些都有库大小的成本); 它允许在10行代码中创建一个OpenGL绘图表面 ,它可以在Linux,Windows,Mac,QNX,“嵌入式Linux”上运行,而且很可能也适用于Android和iOS。 / em>从这个角度来看,它可以作为完美的SDL替代品。 :)