QWindow和QWidget之间的区别是什么



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

在API的描述中,它说:

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

因此,这对窗户来说似乎不是一个优势。此外,它指出:

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

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

QWindow已在Qt 5.0中引入,原因是gui/widgets分离。QWidget现在生活在自己的图书馆(QtWidgets)中;有必要为非基于窗口小部件的应用程序提供"顶层窗口"的抽象,因此创建了QWindow,并存在于QtGui中。

有一整类非基于小部件的应用程序:所有这些都使用QtQuick2。它们根本不使用QtWidget库,事实上,在使用它们时,您总是以某种方式明确地使用QWindows(QQuickView继承自QWindow)。

即使在使用小部件时,Qt内核也会为您创建顶级QWindows,这也会使此类QWindows对象的属性和标志与相应的顶级QWidget保持同步。通过这种方式,您可以像往常一样处理小部件,而完全不了解QWindow。现有的应用程序将继续按预期运行,等等。

到目前为止,我明确使用QWindow的唯一原因是针对一个非常特定的用例:绘制纯OpenGL内容。这很容易实现(通过在窗口上设置OpenGL曲面类型),并避免了引入额外的依赖项(QtWidgets、QtOpenGL等,它们在库大小方面有成本)它允许在大约10行代码中创建OpenGL绘图表面,这些代码将在Linux、Windows、Mac、QNX、"嵌入式Linux"以及很可能的Android和iOS上工作从这个角度来看,它是SDL的完美替代品。:)

相关内容

  • 没有找到相关文章

最新更新