【问题标题】:What is the difference between a QWindow and QWidgetQWindow 和 QWidget 有什么区别
【发布时间】:2013-07-25 14:17:26
【问题描述】:

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

API description 中,它说:

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

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

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

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

【问题讨论】:

    标签: qt5 qwidget


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我在哪里可以找到这方面的一些例子?
    猜你喜欢
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    • 2013-08-19
    相关资源
    最近更新 更多