OpenGL / C ++ / Qt - 需要建议

时间:2009-11-09 21:58:12

标签: c++ user-interface qt opengl glut

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

我的问题是,如果我采取最佳/适当的方法来解决这个问题。我甚至能够编写我的OpenGL程序并拥有我想用C ++代码创建接口的GUI来做我想做的事。

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

3 个答案:

答案 0 :(得分:7)

使用Qt对您的问题是一致的:它通过QtOpenGL模块提供了OpenGl的良好集成。

  1. QGLWidget(直到Qt 4.8)或QOpenGLWidget(自Qt 5.4起)推导您的展示类,并实施虚拟方法paintGL()等。
  2. 您将可以访问Qt的信号和插槽系统,以便您能够捕获Gui事件并更新OpenGl显示。

答案 1 :(得分:-1)

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

我这样做的一件事是常规小部件必须是不透明的。在它们透明的那一刻,它们下面有各种各样的垃圾。那是不久之前所以也许最新版本可以解决这个问题。可能也是特定于平台的YMMV。

答案 2 :(得分:-1)

留在GLUT。没有必要为控制面板添加Qt。您可以打开一个子窗口(或第二个窗口,无论哪个更适合您的程序设计),并将控件绘制到该窗口,并使用GLUT处理鼠标交互。

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