在绘图事件中的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
中看到