QWindow和QWidget有什么区别

时间:2013-07-25 14:17:26

标签: qt5 qwidget

Qt 5.0提供了一个新的QWindow类。虽然这个类的文档非常全面,但我没有看到QWindowQWidget类的确切区别,以及在哪种情况下你更喜欢前者。两者都提供了一种方便的方式来将各种事物可视化到屏幕上,两者都可以使用QPainter进行绘制,并且两者都有一种与OpenGL交互的方式。

API description中,它说:

  

应用程序通常会将QWidget或QQuickView用于其UI,而不是直接使用QWindow。

所以这似乎不是窗口的优势。此外,它声明:

  

Windows可能会占用大量内存。通常的测量是宽度乘以高度乘以颜色深度。窗口可能还包括多个缓冲区以支持双缓冲和三缓冲,以及深度和模板缓冲区。

似乎不赞成使用QWindow。那么在什么情况下你会使用它?

1 个答案:

答案 0 :(得分:64)

由于gui / widgets拆分,在Qt 5.0中引入了

QWindowQWidget现在住在自己的图书馆(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替代品。 :)