2009-11-09 106 views
4

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

我的问题是,如果我正在采取最佳/适当的方法来解决这个问题。我甚至可以编写我的OpenGL程序,并拥有我想用C++代码创建接口的GUI,以完成我想要的操作。

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

回答

7

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

  1. 派生从QGLWidget显示器类(直到Qt的4.8)或QOpenGLWidget(因为Qt的5.4),并实现虚拟方法paintGL()
  2. 您将有机会获得Qt的信号和槽系统,这样你就能够捕捉Gui事件并更新OpenGl显示。
+1

QtOpenGL模块:http://doc.trolltech.com/4.5/qtopengl.html –

+1

对于Qt知之甚少,我得到了一个openGL窗口,其中有一个体面的粒子系统在大约2个小时内工作。它非常好。 –

-2

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

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

+0

啊,我的匿名投票阴影已经回来了! – Troubadour

-1

住在GLUT。没有必要为控制面板添加Qt。你可以打开一个子窗口(或者第二个窗口,对你的程序设计来说效果更好),然后将控件绘制到该窗口中,并使用GLUT来处理鼠标交互。

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

+0

由于作者没有说他已经在使用GLUT,因此您的评论不适用。 Qt明显优于GLUT,并允许应用程序演变成一个完整的应用程序或一个可重用的小部件。 –

+0

Dat Chu,作者确实说他已经在使用GLUT。参见他的帖子的第三段和标签。你说得对,Qt在大多数方面都优于GLUT,但混合Qt和GLUT是非常困难的。 –