将 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 是不是可行?