本文介绍了如何使用QOpenGLWidget呈现文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在旧版本的Qt中有,其中有一个很好的函数。现在我使用类,并且缺少渲染文本的功能。
In older version of Qt there was QGLWidget, with a nice function called renderText. Now I'm using QOpenGLWidget class and the functionality for rendering text is missing.
有没有简单的方法使用QOpenGLWidget来呈现文本?我不想从头开始用OpenGL构建整个文本渲染...
Is there a easy way to render text using QOpenGLWidget? I won't like to build the whole text rendering with OpenGL from scratch...
推荐答案
到什么@jaba写。我也注意到一些图形损坏,除非我在方法结束时调用painter.end()。
I ended up doing a solution similar to what @jaba wrote. I also noticed some graphical corruption unless I called painter.end() at the end of the method.
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();
}
这篇关于如何使用QOpenGLWidget呈现文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!