将 Qt GUI 嵌入到现有的 OpenGL 程序中

Posted

技术标签:

【中文标题】将 Qt GUI 嵌入到现有的 OpenGL 程序中【英文标题】:Embedding Qt GUI into existing OpenGL program 【发布时间】:2012-04-27 09:24:00 【问题描述】:

我目前正在尝试让 Qt 与我现有的程序一起工作。

我正在使用 SFML 来创建我的 OpenGL 渲染上下文并创建窗口。到目前为止,我尝试过的东西总是由 Qt 创建一个单独的窗口,而不是仅仅渲染到现有的上下文中。

有什么方法可以强制 Qt 渲染到已经存在的 OpenGL 上下文?

【问题讨论】:

为什么要让 Qt 将 OpenGL 的东西渲染到非 Qt 窗口?通常,这些 API(SFML、Qt 等)喜欢拥有它们渲染到的窗口。通常不支持渲染到他们无法控制的其他人的窗口。如果没有其他原因,您可以在它们之间传递“窗口”的通用 API…… 原因是我试图通过将 Qt 的 GUI 库嵌入到使用 OpenGL 提供 UI 的现有应用程序中来确定是否可以工作。我想使用它的程序太大而无法调整它以使用 Qt 来处理所有事情,所以我想知道是否可以只使用它的 GUI 部分。 【参考方案1】:

我没有调查具体细节,但this has been done for openage。

我认为查看documentation for QQuickRenderControl 可能是一个不错的起点。

【讨论】:

感谢您的更新。当我在 2012 年问这个问题时,Qt5 和 QQuickRenderControl 都不可用。所以这可能改变了,这真的很棒。将您的答案标记为已接受。 :-)【参考方案2】:

Qt 想要完全控制窗口和事件循环,所以这是行不通的(除非你付出了很多努力)。您最好的选择是使用 QGLWidget 并用它模拟 SFML 的事件管理,以便您的应用程序有效地在 Qt 上运行。很可能将 Qt 小部件渲染到 OpenGL 窗口中(Qt 有一个 OpenGL 小部件后端),但这仍然必须由 Qt 本身管理。

【讨论】:

不幸的是,我也这么想。太糟糕了 Qt 不能手动输入外部事件。感谢您的澄清。

以上是关于将 Qt GUI 嵌入到现有的 OpenGL 程序中的主要内容,如果未能解决你的问题,请参考以下文章

将 Qt GUI 拆分为多个线程用于 GUI、模拟和 OpenGL 是不是可行?

如何将 Qt 集成到现有的 C++ 项目中

将 Worklight 应用程序添加到现有的本机应用程序

qt:在一个 gui 窗口中包含 opencv 和 opengl 子窗口

Qt5怎样使用OpenGL

OpenGL / C++ / Qt - 需要的建议