我正在用OpenGL编写一个程序,我需要某种接口工具栏。我最初的反应是使用GUI,然后进一步调查C ++我意识到GUI依赖于你正在使用的操作系统(我在Windows上)。因此,我决定使用QT帮助我。
我的问题是,如果我采取最佳/适当的方法来解决这个问题。我甚至能够编写我的OpenGL程序并拥有我想用C ++代码创建接口的GUI来做我想做的事。
例如,如果我创建一个简单的“控制面板”,每个方向都有箭头。在屏幕上我有一个由glut创建的盒子对象,我可以将箭头接口点击并与openGL程序交互以移动盒子吗?
答案 0 :(得分:7)
使用Qt对您的问题是一致的:它通过QtOpenGL模块提供了OpenGl的良好集成。
QGLWidget
(直到Qt 4.8)或QOpenGLWidget
(自Qt 5.4起)推导您的展示类,并实施虚拟方法paintGL()
等。答案 1 :(得分:-1)
您可以在QGLWidget
之上使用常规的非OpenGL Qt小部件,因此您所描述的是可行的。
我这样做的一件事是常规小部件必须是不透明的。在它们透明的那一刻,它们下面有各种各样的垃圾。那是不久之前所以也许最新版本可以解决这个问题。可能也是特定于平台的YMMV。
答案 2 :(得分:-1)
留在GLUT。没有必要为控制面板添加Qt。您可以打开一个子窗口(或第二个窗口,无论哪个更适合您的程序设计),并将控件绘制到该窗口,并使用GLUT处理鼠标交互。
此外,Qt和GLUT都有自己的事件循环。要仅使用Qt的事件循环,您必须放弃大部分GLUT结构,因为GLUT事件循环不会调用您的回调函数。 Qt确实有让其他人事件循环调用Qt的事件处理代码的功能,但我认为没有一种简单的方法可以让GLUT处理事件信息。