35

Qt 5.0 提供了一个新QWindow类。尽管该类的文档非常全面,但我看不出它与该类QWindow有何不同QWidget,以及在哪些情况下您更喜欢前者。两者都提供了一种将各种事物可视化到屏幕上的便捷方式,都可以QPainter用于绘图,并且都具有与 OpenGL 交互的方式。

API 描述中,它说:

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

所以这似乎不是窗户的优势。此外,它指出:

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

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

4

1 回答 1

75

QWindow由于 gui / 小部件拆分,已在 Qt 5.0 中引入。QWidget现在住在自己的图书馆(QtWidgets);有必要为非基于小部件的应用程序提供“顶层窗口”的抽象,因此QWindow被创建并存在于QtGui.

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

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

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

于 2013-07-25T19:44:46.460 回答