在旧版本的Qt中有
QGLWidget,有一个很好的函数叫做
renderText.现在我使用
QOpenGLWidget类,并且缺少渲染文本的功能.
有没有简单的方式来渲染文本使用QOpenGLWidget?我不想从头开始用OpenGL构建整个文本渲染
解决方法
我最终做了一个类似于@jaba写的解决方案.我也注意到一些图形损坏,除非我在方法的结尾调用了painter.end().
- void MapCanvas::renderText(double x,double y,double z,const QString &str,const QFont & font = QFont()) {
- // Identify x and y locations to render text within widget
- int height = this->height();
- GLdouble textPosX = 0,textPosY = 0,textPosZ = 0;
- project(x,y,0f,&textPosX,&textPosY,&textPosZ);
- textPosY = height - textPosY; // y is inverted
- // Retrieve last OpenGL color to use as a font color
- GLdouble glColor[4];
- glGetDoublev(GL_CURRENT_COLOR,glColor);
- QColor fontColor = QColor(glColor[0],glColor[1],glColor[2],glColor[3]);
- // Render text
- QPainter painter(this);
- painter.setPen(fontColor);
- painter.setFont(font);
- painter.drawText(textPosX,textPosY,text);
- painter.end();
- }