QTWWidget问题中的QGLWidget

时间:2015-08-10 01:45:04

标签: c++ qt opengl

我遇到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,但它仍然无法正确绘制第一个选项卡。

1 个答案:

答案 0 :(得分:0)

我认为这可能与它不是最顶端的小部件有关。我遇到了问题。检查程序的调试输出。还要检查提到Parent小部件的任何调试输出。

此外,启动QOpenGLDebugLogger并查看它是否吐出任何东西。它比checkError更方便。

我也会选择Kuba建议的新QOpenGL ***课程,不推荐使用QGL ***。

您使用的是哪个版本的Qt?