我遇到QGLWidget在添加到QTabWidget时需要绘制的问题,但在添加到主窗口时按预期工作。
class GLView : public QGLWidget
{
public:
GLView(QWidget* parent = 0) : QGLWidget(parent)
{
QGLFormat format;
format.setVersion(3, 3);
format.setProfile(QGLFormat::CoreProfile);
format.setSampleBuffers(true);
setFormat(format);
QTimer* timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()));
timer->start(20);
}
void initializeGL()
{
funcs = new DrawFunctions();
funcs->setCamera(&cam);
glClearColor(1, 0, 0, 1);
}
void paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
QVector<QVector2D> verts;
verts.append(QVector2D(0, 0));
verts.append(QVector2D(100, 0));
verts.append(QVector2D(100, 100));
verts.append(QVector2D(0, 100));
funcs->solidPolygon(verts);
}
void resizeGL(int w, int h)
{
glViewport(0, 0, w, h);
cam.setOrthographic(w, h);
}
Camera cam;
DrawFunctions* funcs;
};
....
ui->tabWidget->addTab(new GLView(), "GLView);
DrawFunctions是QOpenGLFunctions_3_3_Core的子类,gl函数没有返回任何错误。 我验证了QOpenGLFunctions_3_3_Core :: owningContext()等于当前的Context。
我在Windows 10上运行。 所有帮助表示赞赏。
编辑: 进一步检查后,如果我添加另一个Tab,DrawFunction将绘制一个solidPolygon,但它仍然无法正确绘制第一个选项卡。
答案 0 :(得分:0)
我认为这可能与它不是最顶端的小部件有关。我遇到了问题。检查程序的调试输出。还要检查提到Parent小部件的任何调试输出。
此外,启动QOpenGLDebugLogger并查看它是否吐出任何东西。它比checkError更方便。
我也会选择Kuba建议的新QOpenGL ***课程,不推荐使用QGL ***。
您使用的是哪个版本的Qt?