resizeGL和initializeGL都没有什么代码,GLWidget初始化时已经setAutoFillBackground和AutoSwapBuffers为false了。
重新实现的paintEvent中代码如下
makeCurrent();
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
...
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
...
glCallList(1);//画了很多点和线
...
QPainter painter(this);
painter.setPen(QPen(Qt::blue, 1, Qt::SolidLine, Qt::FlatCap));
painter.setBrush(QBrush(Qt::blue, Qt::SolidPattern));
painter.drawLine(width()/2,0,width()/2,height());
运行结果是QPainter画的部分不显示,3D部分(CallList里的)正常;
如果同时注掉glClear()和glCallList()才能正常显示QPainter的绘图部分。
实在是想不通有什么地方有问题,和overpainting的例子对照了好多遍。
运行环境是Linux 10.04下的Eclipse集成Qt