在 Qt 中,QGLWidget 是一个基于旧的 OpenGL 固定功能管线的类,而 QOpenGLWidget 是一个基于新的 OpenGL 核心功能管线的类。

要将 gluNewQuadric() 升级为 QOpenGLWidget,您需要进行以下步骤:

  1. 替换 QGLWidget 为 QOpenGLWidget。 将代码中的 QGLWidget 替换为 QOpenGLWidget。例如,将 'QGLWidget' 替换为 'QOpenGLWidget'。

  2. 导入必要的 OpenGL 头文件。 在文件的开头导入 QOpenGLWidget 所需的 OpenGL 头文件。例如,导入

  3. 使用 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 可用。

Qt QGLWidget 到 QOpenGLWidget 升级指南:gluNewQuadric() 迁移

原文地址: https://www.cveoy.top/t/topic/plsn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录