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

4
我正在编写一个OpenGL程序,需要使用某种类型的界面工具栏。我的初步反应是使用GUI,但进一步调查C++后发现GUI取决于您使用的操作系统(我在Windows上)。因此,我决定使用QT来帮助我。
我的问题是,我是否采取了最好/适当的方法来解决这个问题。我能否编写我的OpenGL程序并创建想要创建的GUI接口,使其与C++代码进行交互以实现所需的功能?
例如,如果我创建一个简单的“控制面板”,其中有每个方向的箭头,并在屏幕上创建一个由glut创建的盒子对象,我能否将箭头与OpenGL程序进行接口,从而通过点击它们与盒子进行交互?
3个回答

7
使用Qt对您的问题是连贯的:它通过QtOpenGL模块提供了对OpenGl的良好集成。
1. 从QGLWidget(直到Qt 4.8)或从QOpenGLWidget(自Qt 5.4起)派生您的显示类,并实现虚拟方法paintGL()等。 2. 您将可以访问Qt的信号和槽系统,以便能够捕获GUI事件并更新OpenGl显示。

1
只需非常少的Qt知识,我就在约2小时内得到了一个带有不错的粒子系统的openGL窗口。它真的非常好。 - Ron Warholic

-1

你可以在 QGLWidget 上使用普通的非OpenGL Qt小部件,所以你所描述的是可行的。

我在做这个的时候遇到的一个问题是,普通的小部件必须是不透明的。一旦它们有任何透明度,下面就会出现各种垃圾。那是一段时间以前的事情了,也许最新版本解决了这个问题。可能也是特定于平台的,所以你的情况可能会有所不同。


1
啊,我的匿名投票阴影又回来了! - Troubadour

-1

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

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


由于作者没有说他已经在使用GLUT,因此您的评论不适用。Qt 明显优于 GLUT,并允许应用程序发展成为一个完整的应用程序或可重用的小部件。 - Dat Chu
Dat Chu,作者确实说他已经在使用GLUT了。请查看他的帖子第三段和标签。你是对的,Qt在大多数方面都优于GLUT,但混合使用Qt和GLUT非常困难。 - Mr. Berna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接