不再使用 QT OpenGL?
Posted
技术标签:
【中文标题】不再使用 QT OpenGL?【英文标题】:Don’t use QT OpenGL anymore? 【发布时间】:2019-10-16 19:25:26 【问题描述】:我是 C++、OpenGL 和 QT 的新手。事实上,我什至从未接触过 QT。其原因如下;过去我用其他几种语言制作过游戏(主要是 C# 和 Unity)。现在我想用 c++ 玩游戏。但是,我想使用纯 C++,甚至是 Unreal(也许有一天)用于游戏。为此,我知道对于图形,我几乎肯定应该使用 OpenGL(我目前正在学习)。我还需要制作 GUI。当我查找要使用的内容时,看起来最好的选择可能是 QT。这意味着我需要 QT 才能使用 OpenGL。于是我又查了一下。我在这篇文章中找到了 QT OpenGL:How to work with OpenGL and QT?。当我查看 Qt OpenGL (https://doc.qt.io/qt-5/qtopengl-index.html) 时,它说:
警告:此模块不应再用于新代码。请在 Qt GUI 中使用对应的 OpenGL 类。
那么什么是 QT GUI? 而且,将 QT 与 OpenGL 结合使用有多容易?
【问题讨论】:
当然你可以使用Qt进行OpenGL绘图docs。只是 Qt 有一些类现在已被弃用。也许使用 OpenGL 的更“纯粹”的方法是使用glfw
或 sfml
或 wxWidgets
而不是 Qt。
在 SO 中,您只需要在每个帖子中提出一个问题,否则,您的问题会因为 SO 离题而过于宽泛。
@Ripi2 我正在使用 GLFW。那能处理 GUI 吗?
@BeastCoder:GLFW 确实可以处理窗口、输入事件和其他事情,Qt 也可以。一般来说,您不能将 GLFW 与 Qt 混合使用。
我仍然记得 Qt 在 90 年代后期领先于其他任何东西。当您现在使用 Qt 时,您的设计决策和应用程序部署实际上由 Qt 主导。您不只是使用 Qt 库——您正在开发一个Qt 应用程序。这在 UI 驱动的应用程序中并不是一件坏事——但如果你正在创建游戏,我建议使用 GLFW,它允许直接控制事件循环。
【参考方案1】:
正如new features of Qt 5.4 指出的那样,Qt Opengl 模块已被宣布弃用。
已弃用的功能
Qt OpenGL:
Qt OpenGL 模块(包含以“QGL”开头的类)现在已弃用,取而代之的是 Qt GUI 模块(包含 以“QOpenGL”开头的类)。 QGLWidget 现在可以替换为 QOpenGLWidget。
这并不意味着:
模块已被删除,但 Qt 可以随时删除它,恕不另行通知。
你不能在 Qt 中使用 opengl,只是你不应该使用属于 Qt OpenGL 包的 QGLX 类,但你必须使用 Qt Gui 模块的 QOpenGLX 类,例如将 QGLWidget 替换为 @987654323 @。
你也可以找到几个例子here。
【讨论】:
非常感谢!我只有一个问题。你说我不能在 QT 中使用 OpenGL,然后说我“不应该使用属于 QOpenGLX 包的 QGLX 类,但必须使用 Qt Gui 模块的 QOpenGLX 类”,所以我可以或不能使用 OpenGL?你能澄清一下吗?感谢您的精彩回答! @BeastCoder 很简单:Qt 将类从 Qt OpenGL 移动到 Qt Gui 并重命名它们,这样做没有必要保留 Qt OpenGL 以便 Qt 删除它们。因此,您可以在 Qt 中使用 opengl,如链接中提供的示例所示。 非常感谢!我必须了解这一切与 GLFW 有何不同。这是一个大的变化还是更容易的过渡?【参考方案2】:Qt 可能不是适合您的工具。对于一个你想使用 GLFW 的人,它会进入 Qt 的地盘,反之亦然。游戏 UI 的更好选择是 Dear ImGUI,它更适合游戏开发的需求。
【讨论】:
以上是关于不再使用 QT OpenGL?的主要内容,如果未能解决你的问题,请参考以下文章
Qt+Windows,Windows 底层默认使用d3d还是opengl?