C++ QGLWidget上下文销毁

C++ QGLWidget上下文销毁,c++,qt,opengl,qobject,qglwidget,C++,Qt,Opengl,Qobject,Qglwidget,我有一个名为Mesh的类,它使用VBO、纹理等包装和OpenGL对象。该类继承自QObject,其父类设置为myQGLWidget。因此,一旦我关闭小部件,它将被QObject系统删除 但我有一个问题,因为这个网格类有一个析构函数,它执行一些OpenGL调用来清理。当QObject子析构函数启动时,OpenGL上下文已经被破坏,我得到一个segfault 如何确保在删除QGLWidget上下文之前调用我的~Mesh()析构函数 您可以在QGLWidget派生类的析构函数中显式删除Mesh对象,因

我有一个名为
Mesh
的类,它使用VBO、纹理等包装和OpenGL对象。该类继承自
QObject
,其父类设置为my
QGLWidget
。因此,一旦我关闭小部件,它将被QObject系统删除

但我有一个问题,因为这个网格类有一个析构函数,它执行一些OpenGL调用来清理。当QObject子析构函数启动时,OpenGL上下文已经被破坏,我得到一个segfault


如何确保在删除
QGLWidget
上下文之前调用我的
~Mesh()
析构函数

您可以在
QGLWidget
派生类的析构函数中显式删除
Mesh
对象,因为您放入其中的所有内容都将在
~QGLWidget()
本身之前执行(以及在负责删除子对象的
~QObject()
之前执行)


或者,您可以将对象设为非指针成员,或者将其封装在智能指针中以实现相同的结果。

我建议您签出QOpenGLContext并自己管理它。