1

我有一个 OpenGL 应用程序,我想给它添加一个 GUI。

我的问题是我想保持创建窗口和主循环的方式。事实上,我想保留我的应用程序,只是添加一些小部件来与场景交互......

我知道我们可以通过重载 QApplication 将 OpenGL 用作渲染器,但它会创建一个窗口并创建另一个我不想要的 OpenGL 上下文...我知道我可以使用 QGLWidget 将 OpenGL 场景渲染到其中但它没有也适合我想要的...

我在很多论坛上搜索都没有找到解决方案。我想知道这是否可能,如果可以,实现这一目标的方法是什么?

如果不可能做到这一点,有没有办法做到这一点?似乎CEGUI可以做到,但在我看来它似乎有点年轻,不是吗?

4

2 回答 2

1

我的问题是我想保持创建窗口和主循环的方式。

要使用 Qt 小部件系统,您必须使用 QApplication 和它产生的事件系统。你不能有两个事件循环在相同的资源(窗口、用户输入、信号接收和传递)之间进行竞争。

事实上,我想保留我的应用程序,只是添加一些小部件来与场景交互......

然后一首优美的滚石歌曲适用于你:“你不能总是得到你想要的……”

顺便提一句?您现在如何创建窗口?过剩?然后从 QGLWidget 派生并覆盖其resizeGL,paintGLtimerEvent使用 0 延迟计时器将空闲时间加倍,这些mouse*Event方法将为您提供与 GLUT 完全相同的行为。

您可能会发现 Qt 的框架和事件系统正是您所需要的。

于 2013-05-10T18:08:12.430 回答
0

你试过hello-gl例子吗?它在 OpenGL 渲染和其他基本操作(调整大小、循环、视图)方面有非常好的和干净的代码。如果您遇到 GLUT 问题,只需glutInit(&argc,argv);int main().

于 2013-05-10T18:10:49.690 回答