Qt QGLWidget 到 QOpenGLWidget 升级指南:gluNewQuadric() 迁移
在 Qt 中,QGLWidget 是一个基于旧的 OpenGL 固定功能管线的类,而 QOpenGLWidget 是一个基于新的 OpenGL 核心功能管线的类。
要将 gluNewQuadric() 升级为 QOpenGLWidget,您需要进行以下步骤:
-
替换 QGLWidget 为 QOpenGLWidget。 将代码中的 QGLWidget 替换为 QOpenGLWidget。例如,将 'QGLWidget' 替换为 'QOpenGLWidget'。
-
导入必要的 OpenGL 头文件。 在文件的开头导入 QOpenGLWidget 所需的 OpenGL 头文件。例如,导入
。 -
使用 QOpenGLFunctions 类的实例来调用 OpenGL 函数。 在 QOpenGLWidget 的子类中,您可以使用 QOpenGLFunctions 类的实例来调用 OpenGL 函数。例如,您可以使用 QOpenGLFunctions_3_3_Core 类的实例来调用 OpenGL 3.3 核心功能的函数。
以下是一个示例代码,说明如何升级 gluNewQuadric() 为 QOpenGLWidget:
#include <QOpenGLWidget>
#include <QOpenGLFunctions_3_3_Core>
class MyOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_3_Core
{
public:
MyOpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {}
protected:
void initializeGL() override
{
initializeOpenGLFunctions();
}
void paintGL() override
{
// 使用 QOpenGLFunctions 类的实例来调用 OpenGL 函数
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// 使用 OpenGL 核心功能创建 quadric
GLUquadric *quadric = gluNewQuadric();
// 绘制 quadric
gluSphere(quadric, 1.0, 32, 32);
// 删除 quadric
gluDeleteQuadric(quadric);
}
};
请注意,还有其他一些 OpenGL 函数(如 gluSphere)需要使用 QOpenGLFunctions 类的实例来调用。您需要根据您的特定需要进行相应的修改。
同时,请确保您的 Qt 版本支持 QOpenGLWidget。从 Qt 5.4 开始,QOpenGLWidget 可用。
原文地址: https://www.cveoy.top/t/topic/plsn 著作权归作者所有。请勿转载和采集!