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

Posted

技术标签:

【中文标题】OpenGL / C++ / Qt - 需要的建议【英文标题】:OpenGL / C++ / Qt - Advice needed 【发布时间】:2009-11-09 21:58:12 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

使用 Qt 可以解决您的问题:它通过 QtOpenGL 模块提供了良好的 OpenGL 集成。

    QGLWidget(Qt 4.8 之前)或QOpenGLWidget(Qt 5.4 起)派生显示类并实现虚拟方法paintGL() 等。 您将可以访问 Qt 的信号和槽系统,以便能够捕捉 Gui 事件并更新 OpenGL 显示。

【讨论】:

在对 Qt 知之甚少的情况下,我在大约 2 小时内得到了一个带有体面粒子系统的 openGL 窗口。它真的很不错。【参考方案2】:

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

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

【讨论】:

啊,我的匿名投反对票的影子又回来了!【参考方案3】:

保持过剩。无需为控制面板添加 Qt。您可以打开一个子窗口(或第二个窗口,以更适合您的程序设计为准),然后将控件绘制到该窗口中,并使用 GLUT 来处理鼠标交互。

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

【讨论】:

由于作者没有说他已经在使用 GLUT,因此您的评论不适用。 Qt 显然优于 GLUT,它允许应用程序演变为成熟的应用程序或可重用的小部件。 Dat Chu,作者确实说他已经在使用 GLUT。请参阅他的帖子的第三段和标签。你说得对,Qt 在很多方面都优于 GLUT,但是将 Qt 和 GLUT 混合起来非常困难。

以上是关于OpenGL / C++ / Qt - 需要的建议的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenGL 和 QT 进行纹理映射 - C++

使用 qt 和 opengl 编译 c++ 项目时找不到标识符错误

Qt5怎样使用OpenGL

C++学习(四七九)qt如何使用系统opengl库

qt + opengl 开发环境的搭建

C++ Qt 异步进程快速计时建议