4

我正在用 OpenGL 编写一个程序,我需要某种接口工具栏。我最初的反应是使用 GUI,然后进一步研究 C++ 我意识到 GUI 取决于您使用的操作系统(我在 Windows 上)。因此,我决定使用 QT 来帮助我。

我的问题是我是否对这个解决方案采取了最好/适当的方法。我什至能够编写我的 OpenGL 程序并拥有我想用 C++ 代码创建接口的 GUI 来做我想做的事情。

例如,如果我创建一个简单的“控制面板”,每个方向都有箭头。在屏幕上,我有一个由 glut 创建的盒子对象,我可以连接要单击的箭头并与 openGL 程序交互以移动盒子吗?

4

3 回答 3

7

使用 Qt 可以解决您的问题:它通过 QtOpenGL 模块提供了良好的 OpenGL 集成。

  1. QGLWidget从(直到 Qt 4.8)或从QOpenGLWidget(自 Qt 5.4)派生您的显示类并实现虚拟方法paintGL()等。
  2. 您将可以访问 Qt 的信号和槽系统,以便您能够捕获 Gui 事件并更新 OpenGL 显示。
于 2009-11-09T22:04:59.477 回答
-1

留在过剩。无需为控制面板添加 Qt。您可以打开一个子窗口(或第二个窗口,以更适合您的程序设计为准),然后将控件绘制到该窗口中,并使用 GLUT 来处理鼠标交互。

此外,Qt 和 GLUT 都有自己的事件循环。要仅使用 Qt 的事件循环,您必须放弃大部分 GLUT 结构,因为 GLUT 事件循环不会在那里调用您的回调函数。Qt 确实具有让其他人事件循环调用 Qt 的事件处理代码的功能,但我认为没有一种简单的方法可以让 GLUT 传递事件信息。

于 2009-11-10T15:37:48.097 回答
-1

您可以在 a 之上使用常规的非 OpenGL Qt 小部件,QGLWidget因此您所描述的是可行的。

这样做时我遇到的一件事是常规小部件必须是不透明的。在它们以任何方式透明的那一刻,它们下面都是各种各样的垃圾。那是前一阵子,所以也许最新版本解决了这个问题。也可能是特定于平台的,所以 YMMV。

于 2009-11-09T22:13:34.250 回答