在较早版本的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();
}
关于c++ - 如何使用QOpenGLWidget渲染文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28216001/