首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWindow和QWidget的区别是什么?

QWindow和QWidget的区别是什么?
EN

Stack Overflow用户
提问于 2013-07-25 14:17:26
回答 1查看 19.5K关注 0票数 37

QT5.0提供了一个新的QWindow类。虽然这个类的文档是相当全面的,但我没有看到QWindowQWidget类到底有什么不同,在哪种情况下您更喜欢前者。两者都提供了一种可视化屏幕上各种事物的便捷方式,两者都可以使用QPainter进行绘图,而且都有一种与OpenGL交互的方法。

API description中,它说:

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

因此,这似乎并不是一个有利的窗口。此外,它还指出:

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-25 19:44:46

由于gui / widgets拆分,QT5.0中引入了QWindowQWidget现在生活在自己的库(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替换。:)

票数 78
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17860604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档