0

QT版本:5.12.0

OpenGL版本:4.5核心

开发环境:VS 2017

轮廓:

QT += widgets
...

我已经将glad.c 文件添加到我的项目中,并确保glad.h 包含在每个文件的首位。

但是当我编译我的项目时,所有其他使用OpenGL函数的类都是正常的,除了继承自QOpenGLWidget的类。

映射视图.h

#include <glad/glad.h>
...
class MappingView : public QOpenGLWidget {
    Q_OBJECT

public:
    MappingView(QWidget * parent = nullptr);
    ~MappingView();

    virtual void initializeGL();
    virtual void resizeGL(int w, int h);
    virtual void paintGL();
    ...
    GLuint m_pointer_texture;
}

映射视图.cpp

MappingView::MappingView(QWidget * parent) : QOpenGLWidget(parent) {
    
}

MappingView::~MappingView() {
    glDeleteTextures(1, &m_pointer_texture);
}

void MappingView::initializeGL() {
    // load glad
    if (!gladLoadGL()) {
        return;
    }

    glGenTextures(1, &m_pointer_texture);
}

编译错误:C3861,找不到glDeleteTextures

当我在VS中点击glDeleteTextures的定义时,会跳转到QOpenGLFunctions,而不是glad.h。似乎 QT 中的 OpenGL 和高兴是冲突的。但我的项目不使用 QOpenGLFunctions。

当我尝试在 MappingView.h 中添加宏时,

#define QT_NO_OPENGL

在glad.h中可以成功找到MappingView中的所有OpenGL函数,但是却找不到基类QOpenGLWidget,这意味着MappingView类不能再继承QOpenGLWidget了。

如果有人可以帮助我解决问题,我将不胜感激,谢谢!

4

0 回答 0