我有一个QGLWidget作为我的QMainWindow的中心小部件。它初始化GL上下文并在其paintGl函数中进行绘制调用。在我来自QMainWindow的菜单栏中,我有一个导入文件按钮,它触发一个仅在QGLWidget完成初始化函数时运行的函数。这个导入文件按钮调用应该将3d对象的顶点传递给GL缓冲区,这似乎工作正常。
但是,当QGLWidget调用其绘制函数时,我收到错误的访问错误,并在调试模式下打开以下行:
Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr));
d_ptr->DrawArrays(mode, first, count); //exc_bad_access
如果我不是从菜单中的导入文件按钮触发我的文件导入功能,而是直接从QGLWidget的initializeGl函数触发,那么一切都很好。
可能是什么问题?如果您需要更多信息,请与我们联系。
答案 0 :(得分:0)
我发现了,
每次paint函数或initializeGL函数运行时,它们会自动调用makeCurrent()函数,使QGLWidget的gl contex在当前线程中是当前的。即使QMainWindow与QGLWidget在同一个线程中运行,绕过QGLWidget类并因此省略makeCurrent()函数,导致我的“文件导入”函数中的OpenGl函数在不同的上下文(或空上下文)中运行,而不是QGLWidget。