QWidgets可以添加到QWindow吗?

Posted

技术标签:

【中文标题】QWidgets可以添加到QWindow吗?【英文标题】:Can QWidgets be added to QWindow? 【发布时间】:2014-05-29 08:32:18 【问题描述】:

现在推荐使用 QWindow 进行 OpenGL 绘图。是否可以在此窗口中添加小部件?如果是这样,怎么做?如果没有,我应该如何使用 Qt5 向 OpenGL 程序添加小部件?

【问题讨论】:

How to create a Qt form class from a custom window?的可能重复 您的最终结果应该是什么样子?您可以考虑换一种方式——使用QWidget::createWindowContainer 将您的 GL 窗口嵌入到 QWidget 层次结构中。 @peppe QWidget::createWindowContainer 的问题是它阻止我从传入的窗口对象调用方法。它也使得无法继承。 为什么会阻止这样的事情发生?!使用它返回的QWidget * 进行 UI 管理(布局等);使用 YourWindow * 传递给它的其他任何东西(逻辑)。 @peppe 在创建容器后我对窗口对象所做的任何更改似乎都对小部件没有影响。 【参考方案1】:

应用程序通常将QWidgetQQuickView 用于其UI,而不是直接使用QWindowQWindowQWidget 更低级别。如果您想直接使用QWindow,则需要做更多的工作才能完成这项工作。您应该手动完成所有与绘图相关的事情,这并不容易。

然而,如果你真的想要一个QWindow/QGuiApplication而不是QWidget/QApplication,你可以使用QBackingStore,它被QWidget使用,或者SceneGraph被@使用987654335@QWindow::exposeEvent().

您可以查看使用QPainter here 的基于QWindow 的最小应用程序示例。

【讨论】:

以上是关于QWidgets可以添加到QWindow吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 QWidget 或其他 QWidget 派生控件添加到 QWindow

在主窗口中显示 QWindow

从 QLayout 中删除 QWidgets?

从 QGLWidget 迁移到 QWindow

自定义形状的 QWidgets 消失

外部进程嵌入到Qt进程界面(使用QWindow::fromWinId)