理解QPainter在QOpenGLWidget的paintEvent函数中的重要性

时间:2016-11-25 12:31:00

标签: c++ qt opengl

在绘图事件中的overpaint example of qt中,如果我删除QPaint调用,则不会绘制任何内容。

void GLWidget::paintEvent(QPaintEvent *event)
{
    makeCurrent();
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();

    qglClearColor(qtPurple.dark());
    glShadeModel(GL_SMOOTH);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_MULTISAMPLE);
    static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
    glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);

    setupViewport(width(), height());

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0, 0.0, -10.0);
    glRotatef(xRot / 16.0, 1.0, 0.0, 0.0);
    glRotatef(yRot / 16.0, 0.0, 1.0, 0.0);
    glRotatef(zRot / 16.0, 0.0, 0.0, 1.0);

    logo->draw();

    glShadeModel(GL_FLAT);
    glDisable(GL_CULL_FACE);
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_LIGHTING);

    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();

    //QPainter painter(this); ---> I remove this and nothing
    //painter.end();               will be displayed. 
}

但我很好奇,因为在logo-> draw();还有QpenGL调用,如" glDrawElements"我认为不应该依赖QPainter。

我想了解QPainter如何影响此功能。 以及为什么在我们覆盖paintGL时不会使用它,这可以在example

中看到

0 个答案:

没有答案