在OpenGL中渲染QWidget

Render QWidget in OpenGL

本文关键字:QWidget OpenGL      更新时间:2023-10-16

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

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

我知道我们可以通过重载QApplication来使用OpenGL作为渲染器,但它会创建一个窗口并创建另一个我不想要的OpenGL上下文…我知道我可以使用QGLWidget来渲染OpenGL场景,但它不适合我想要的太…

我搜索了很多论坛没有找到解决方案。我想知道这是否可能,如果是,如何实现这一目标?

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

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

要使用Qt小部件系统,必须使用QApplication和它生成的事件系统。你不能让两个事件循环在相同的资源(窗口,用户输入,信号接收和发送)之间竞争。

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

然后滚石乐队的一首美丽的歌适用于你:"你不能总是得到你想要的…"

顺便说一句吗?您现在是如何创建窗口的?过剩?然后从QGLWidget派生并覆盖它的resizeGL, paintGLtimerEvent与一个0延迟定时器作为空闲和mouse*Event方法将给你完全相同的行为与GLUT。

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

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