OpenGL / C++ / Qt - 需要建议
-
19-09-2019 - |
题
我正在用 OpenGL 编写一个程序,我需要某种接口工具栏。我最初的反应是使用 GUI,然后进一步研究 C++,我意识到 GUI 依赖于您正在使用的操作系统(我在 Windows 上)。因此,我决定使用QT来帮助我。
我的问题是我是否正在采取最好/适当的方法来解决这个问题。我什至能够编写我的 OpenGL 程序并拥有我想要使用 C++ 代码创建界面来执行我想要执行的操作的 GUI。
例如,如果我创建一个简单的“控制面板”,每个方向都有箭头。在屏幕上,我有一个由 glut 创建的盒子对象,我可以连接要单击的箭头并与 openGL 程序交互以移动盒子吗?
解决方案
使用 Qt 可以解决您的问题:它通过 QtOpenGL 模块提供了对 OpenGL 的良好集成。
- 派生您的显示类
QGLWidget
(直到 Qt 4.8)或从QOpenGLWidget
(自 Qt 5.4 起)并实现虚方法paintGL()
ETC。 - 您将可以访问 Qt 的信号和槽系统,以便能够捕获 Gui 事件并更新 OpenGL 显示。
其他提示
您可以在QGLWidget
你描述等什么的顶部使用常规的非OpenGL的Qt控件是做-能。
有一件事情我碰到的时候做这个是正规的小部件必须是不透明的。他们是透明的那一刻以任何方式有各种他们脚下的垃圾。这是前一阵子,所以也许最新版本解决了这个问题。可能是特定于平台也因此因人而异。
留在GLUT。有没有必要添加的Qt的控制面板。你可以打开一个子窗口(或第二个窗口,无论是否适合你的方案设计更好),并绘制控件到该窗口,并使用GLUT处理鼠标交互。
此外,Qt和GLUT各自具有它们自己的事件循环。只使用Qt的事件循环,你不得不放弃很多过剩的结构,因为供应过剩事件循环不会在那里调用回调函数。 Qt的确实有功能,有让别人事件循环调用Qt的事件处理代码,但我不认为有一个简单的方法,使GLUT手从事件信息。
不隶属于 StackOverflow