Qt QOpenGLFunctions 未在此范围内声明
Posted
技术标签:
【中文标题】Qt QOpenGLFunctions 未在此范围内声明【英文标题】:Qt QOpenGLFunctions not declared in this scope 【发布时间】:2014-02-17 19:51:28 【问题描述】:我正在为网格数据创建一种可绘制对象类,但出现此链接器错误。这也是处理在 Qt 教程之一中使用的网格绘制的另一个类的顶部。我还使用 QGLWidget 作为我正在绘制的表面。这是头文件查找第一个类的内容。
#ifndef GLOBJECT_H
#define GLOBJECT_H
#include <QOpenGLFunctions>
#include <QOpenGLShaderProgram>
#include <QVector3D>
#include <QVector2D>
#include <QDebug>
#include <QFile>
struct VertexData
QVector3D position;
QVector2D texCoord;
QVector3D normal;
;
class GLObject
public:
GLObject();
VertexData *data;
GLushort *indices;
GLuint vboIds[2];
int faceCount, vertCount;
bool generateFromPLY(QString filename);
;
#endif // GLOBJECT_H
这是另一个类的标题。
#ifndef GEOMETRYENGINE_H
#define GEOMETRYENGINE_H
#include <QObject>
#include <QOpenGLFunctions>
#include <QOpenGLShaderProgram>
#include <QVector2D>
#include <QVector3D>
#include <QFile>
#include <QDebug>
#include <QVector>
#include <globject.h>
class GeometryEngine : public QObject, protected QOpenGLFunctions
Q_OBJECT
public:
GeometryEngine();
~GeometryEngine();
void init();
void drawGeometry(QOpenGLShaderProgram *program);
//void drawCubeGeometry(QOpenGLShaderProgram *program);
bool generateFromPly(QString filename);
QVector<GLObject> drawables;
int drawableId = 0;
;
#endif // GEOMETRYENGINE_H
G:\Dropbox\GLSLDemo\globject.cpp:60: 错误: 'glGenBuffers' 未在此范围内声明 glGenBuffers(2, vboIds); 以及其他 gl 调用的相同错误。 最初,我拥有 GeometryEngine 中的所有代码。那时我没有范围问题。如果相关,则在 GeometryEngine 的 init() 中调用 initilizeOpenGLFunctions()。 ^
【问题讨论】:
这就是 QOpenGLFunctions 的用途。它将 GL/ES 2.0 上下文引入到从我理解的继承它的任何窗口/小部件中。我确实让所有这些代码都能正常工作,但我正在重新组织它,所以它不会那么混乱。我可以提取我的其他工作代码,因为我在破坏太多东西之前备份了它。我只是很难过为什么它现在才给我这个范围错误。不过感谢标题反馈。我还在学习如何组织我的 C 项目。 不确定 globject.cpp:60 包含什么,但只有 GeometryEngine 继承自 QOpenGLFunctions(受保护),但 globject.h 中没有。所以我假设 globject.cpp:60 中的任何内容,它都不在从 QOpenGLFunctions 继承的类的范围内 哦,既然GeometryEngine继承了protected,没有其他类可以访问这些函数?我想这是有道理的。我认为 globject.cpp:60 是 glBindBuffer() 。我实际上已经继续前进并或多或少地改变了一些事情。 是的,为了使它们公开可用,您必须公开继承。 另外,似乎 QOpenGLFunctions 实际上必须被继承并用作成员函数。好吧,我想我已经解决了这个问题。谢谢。 【参考方案1】:QT OpenGL 很奇怪。我认为 QOpenGLFunctions 维护了一个共同的上下文。我也不擅长 C++ 并且使用了受保护的错误。
【讨论】:
以上是关于Qt QOpenGLFunctions 未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章