大家好:最近我写的一个程序用了Qt中QGLWidget 类的renderText()成员函数来在OpenGL中画文字。但是,这个程序老是崩溃。当我注释掉renderText()函数时程序能正常运行,当我去掉renderText()函数的注释后,程序就会崩溃。我是新手,不知道是什么原因,在网上找了一个星期也找不到答案。望在这方面熟悉的大侠、大哥们帮帮忙,不胜感激!代码如下:
void MyDisplay::drawbody(){
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
GLfloat x = 3.0 * GLfloat(width()) / height();
glOrtho(-x, +x, -3.0, +3.0, 4.0, 15.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glTranslatef(0.0, 0.0, -10.0);
glScalef(scaling, scaling, scaling);
glRotatef(rotationX, 1.0, 0.0, 0.0);
glRotatef(rotationY, 0.0, 1.0, 0.0);
glRotatef(rotationZ, 0.0, 0.0, 1.0);
glEnable(GL_MULTISAMPLE);
glCullFace(GL_BACK);
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCallList(glObject);
qint32 ii,tmpscale_x,tmpscale_y,tmpscale_z;
ii=gettotalscale();
tmpscale_x=qint32(2*tmp_x*1000/4);
tmpscale_y=qint32(2*tmp_y*1000/4);
tmpscale_z=qint32(2*tmp_z*1000/4);
float tmpscale_xx=tmp_x/2;
float tmpscale_yy=tmp_y/2;
float tmpscale_zz=tmp_z/2;
QString Xbar="X (m)";
QString Ybar="Y (m)";
QString Zbar="Z (m)";
QString Xnum=tr("X=%1(m)").arg(length_x*1000);
QString Ynum=tr("Y=%1(m)").arg(length_y*1000);
QString Znum=tr("Z=%1(m)").arg(length_z*1000);
setFont(QFont("Times", 6));
qglColor(QColor(0, 0, 0));
renderText(-tmp_x-0.1, -tmp_y-0.1, -tmp_z-0.1,QString::number(0).toLocal8Bit() );
renderText(-tmp_x+tmpscale_xx,-tmp_y-0.1,-tmp_z-0.1,QString::number(tmpscale_x).toLocal8Bit());
renderText(+0.0,-tmp_y-0.1,-tmp_z-0.1,QString::number(tmpscale_x*2).toLocal8Bit());
renderText(+0.0+tmpscale_xx,-tmp_y-0.1,-tmp_z-0.1,QString::number(tmpscale_x*3).toLocal8Bit());
renderText(+tmp_x,-tmp_y-0.1,-tmp_z-0.1, QString::number(tmpscale_x*4).toLocal8Bit());
renderText(length_x-tmp_x,-tmp_y-0.3,-tmp_z-0.3, Xnum.toLocal8Bit());
renderText(+tmp_x+0.6,-tmp_y-0.1,-tmp_z-0.1,Xbar.toLocal8Bit());
renderText(-tmp_x-0.1,-tmp_y+tmpscale_yy,-tmp_z-0.1,QString::number(tmpscale_y).toLocal8Bit());
renderText(-tmp_x-0.1,+0.0,-tmp_z-0.1,QString::number(tmpscale_y*2).toLocal8Bit());
renderText(-tmp_x-0.1,+0.0+tmpscale_yy,-tmp_z-0.1,QString::number(tmpscale_y*3).toLocal8Bit());
renderText(-tmp_x-0.1,+0.0+tmp_y,-tmp_z-0.1, QString::number(tmpscale_y*4).toLocal8Bit());
renderText(-tmp_x-0.3,length_y-tmp_y,-tmp_z-0.3,Ynum.toLocal8Bit());
renderText(-tmp_x-0.1,+tmp_y+0.4,-tmp_z-0.1,Ybar.toLocal8Bit());
renderText(-tmp_x-0.1,-tmp_y-0.1,-tmp_z+tmpscale_zz,QString::number(tmpscale_z).toLocal8Bit());
renderText(-tmp_x-0.1,-tmp_y-0.1,+0.0,QString::number(tmpscale_z*2).toLocal8Bit());
renderText(-tmp_x-0.1,-tmp_y-0.1,+0.0+tmpscale_zz,QString::number(tmpscale_z*3).toLocal8Bit());
renderText(-tmp_x-0.1,-tmp_y-0.1,+tmp_z,QString::number(tmpscale_z*4).toLocal8Bit());
renderText(-tmp_x-0.3,-tmp_y-0.3,length_z-tmp_z, Znum.toLocal8Bit());
renderText(-tmp_x-0.1,-tmp_y-0.1,+tmp_z+0.4,Zbar.toLocal8Bit());
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glPopAttrib();
}
这个问题已经纠结我好久了,再次求大家帮帮忙,谢谢了。