【发布时间】: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)测试用例,以便我可以尝试重现。