在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中看到
1条答案
按热度按时间oogrdqng1#
在
paintEvent()
内部绘制时,您需要自己调用swapBuffers()
或使用QPainter
,这将在其析构函数或QPainter::end()
中调用swapBuffers()