QT5.0提供了一个新的QWindow类。虽然这个类的文档是相当全面的,但我没有看到QWindow与QWidget类到底有什么不同,在哪种情况下您更喜欢前者。两者都提供了一种可视化屏幕上各种事物的便捷方式,两者都可以使用QPainter进行绘图,而且都有一种与OpenGL交互的方法。
在API description中,它说:
应用程序通常对其UI使用QWidget或QQuickView,而不是直接使用QWindow。
因此,这似乎并不是一个有利的窗口。此外,它还指出:
Windows可能会使用大量内存。通常的测量方法是宽度乘以高度乘以颜色深度。窗口还可能包括多个缓冲区,以支持双重和三重缓冲,以及深度和模板缓冲区。
它似乎不赞成使用QWindow。那么在什么情况下你会使用它呢?
发布于 2013-07-25 19:44:46
由于gui / widgets拆分,QT5.0中引入了QWindow。QWidget现在生活在自己的库(QtWidgets)中;有必要为非基于小部件的应用程序提供一个"toplevel窗口“的抽象,从而创建了QWindow --并且生活在QtGui中。
有一整类非基于小部件的应用程序:所有使用QtQuick2的应用程序。他们根本不使用QtWidget库,事实上,在使用它们时,您总是以某种方式解释使用QWindows (QQuickView继承自QWindow)。
即使在使用小部件时,顶级QWindows也是由Qt内核为您创建的,它还使这些QWindow对象的属性和标志与相应的顶级QWidgets保持同步。这样,您就可以像往常一样处理小部件,而根本不了解QWindow。现有的应用程序将继续按预期运行,等等。
我使用QWindow的唯一原因(到目前为止)是为了一个非常具体的用例:来绘制纯OpenGL内容。这很容易实现(通过在窗口上设置OpenGL图面类型),并避免引入额外的依赖项(QtWidgets、QtOpenGL等,这在库大小上是有代价的);允许在类似于10行代码中创建OpenGL绘图面,这些代码将在Linux、Windows、Mac、QNX、"embedded“上工作,也很有可能是Android和iOS。从这个角度来看,它是一个完美的SDL替换。:)
https://stackoverflow.com/questions/17860604
复制相似问题