【问题标题】:QGLWidget in QTabWidget issueQTabWidget 问题中的 QGLWidget
【发布时间】:2015-08-10 01:45:03
【问题描述】:

我遇到了一个问题,即 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() 等于当前上下文。

我在 Windows 10 上运行。 感谢所有帮助。

编辑: 经过进一步检查,如果我添加另一个选项卡,DrawFunction 将绘制一个solidPolygon,但它仍然无法正确绘制第一个选项卡。

【问题讨论】:

  • 尝试使用QOpenGLWidget,它与常规小部件的互操作性比QGLWidget 好得多。
  • 感谢您的回复,但是使用 QOpenGLWidget 的结果是一样的
  • 那么这可能是一个错误。请将您的示例转换为单文件(仅 main.cpp)测试用例,以便我可以尝试重现。

标签: c++ qt opengl


【解决方案1】:

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

另外,启动QOpenGLDebugLogger 看看它是否会吐出任何东西。比 checkError 方便多了。

我也会按照 Kuba 的建议选择更新的 QOpenGL*** 类,QGL*** 已被弃用。

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

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多