这个问题非常难以解释,我甚至无法用一个词来解释这个现象所以我只会给你看一张照片。
最左边是实际的dockwidget,它的所有重叠都是一个openGL小部件,它应该是蓝色和树。但事实并非如此。
这个问题甚至被称为什么?如何解决?
我还应该补充一点,当没有涉及dockwidget时,它可以很好地工作。
编辑:新信息,在使用openGL探查器分析应用程序之后,我发现当使用dock小部件时,CGLUpdateContext永远不会因某种原因被调用,并且每个gl调用都会导致错误GL_INVALID_FRAMEBUFFER_OPERATIO
NI还发现错误invalid drawable
出现在控制台中。
进一步的研究表明,这可能是Qt中的错误。我会更多地研究它。
EDIT2:我在初始化openGL并调用glClear之前已经进行了此检查,这是抛出第一个错误的地方。
GLenum er = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(er != GL_FRAMEBUFFER_COMPLETE) {
abort();
}
当使用停靠窗口小部件时,此时会中止,告诉我们帧缓冲区不完整。但是,如果我删除停靠小部件,这不会中止,应用程序工作正常。 我现在知道帧缓冲区不完整,但为什么呢?这是Qt的一个问题,而不是我的代码。