将 pyqt opengl 上下文传递给 C++ 进行渲染

Posted

技术标签:

【中文标题】将 pyqt opengl 上下文传递给 C++ 进行渲染【英文标题】:Passing pyqt opengl context to C++ for rendering 【发布时间】:2014-02-28 10:44:02 【问题描述】:

我正在开发一个物理模拟工具。现在它只是一个控制台应用程序,没有 GUI 等,但我想在某个时候添加它。该应用程序有一个非常简单的渲染器,因此我可以看到模拟结果。

我过去使用过 PyQt,我喜欢它用于 GUI 开发,所以我想知道是否可以在 PyQt 中创建 GUI,并在我的 C++ 渲染器中使用来自 QGLWidgets 的 OpenGL 上下文。现在我使用 SDL 进行渲染和事件处理,所以我的想法是改用 PyQt 中生成的 OpenGL 上下文。

有人知道这是否可能吗?我一直在寻找可能的解决方案,但我没有找到任何明确的答案或示例。如果不可能,您知道在 python 中开发 GUI 并使用 C++ 渲染器的任何其他可能性吗?

【问题讨论】:

这具体是关于使用 QGLWidget 的 OpenGL 上下文还是关于从 python 运行你的 C++ 代码? 我计划使用 Boost.Python 或 SWIG 从 C++ 运行 python,但我还没有真正尝试过它。但是,渲染器是一段我不知道如何粘合的代码。 【参考方案1】:

您可以使用 SWIG (swig.org) 将 C++ 渲染器库包装到 python 模块中,然后可以将其导入到您的 pyqt 应用程序中。这假设您的 C++ lib 具有您必须从从 QGLWidget 派生的类(initializeGL、resizeGL、paintGL)中调用的适当函数,但否则它应该非常简单。

没有理由 Boost.Python 的工作方式与 SWIG 不同。细节并不重要。最终,您的 python 脚本正在调用 C++ 函数和方法,因此必须有将 python 数据转换为 C++ 数据并返回的代码,如果正确完成,那么您可以专注于您的 GUI。

【讨论】:

好的,我理解这种方法。以前有人试过吗?我从未使用过 SWIG,但这绝对是我正在考虑的选项之一。但是,由于我打算只使用 python,并且我目前正在使用 Boost 来完成其他任务,所以我稍微偏向于使用 Boost.Python。在这种情况下,类似的方法会起作用吗? 确定;扩展我的答案

以上是关于将 pyqt opengl 上下文传递给 C++ 进行渲染的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单击 PyQt 中的按钮将参数传递给函数?

将列表字典传递给 Qtablewidget - PyQT5

PyQt4 将转换矩阵作为参数传递给构造函数

在不丢失默认信号参数的情况下将额外参数传递给 PyQt 插槽

在 PyQt5 中将参数传递给 QThread 子类时出错

将 NSManagedObjectContext 上下文传递给 ViewController 是 nil