从文档中:
如果默认的 OpenGL 绘制引擎是 QPaintEngine::OpenGL,则此函数只能在 QPainter::beginNativePainting()/QPainter::endNativePainting() 块内使用。要使 QPaintEngine::OpenGL 成为默认的 GL 引擎,请在 QApplication 构造函数之前调用 QGL::setPreferredPaintEngine(QPaintEngine::OpenGL) 。
因此,您是否尝试QPainter::beginNativePainting()
在通话之前和QPainter::endNativePainting()
之后使用?
另外,请注意,文本是在窗口坐标中呈现的,完全没有考虑您当前的 OpenGL 矩阵状态(简而言之,您的glRotatef(90, 0, 0, 1)
调用无效)。您可以在此处的实现中看到,他们通过调用 保存您当前的 OpenGL 状态qt_save_gl_state()
,然后使用以下命令创建他们全新的矩阵:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, width, height);
glOrtho(0, width, height, 0, 0, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
然后绘制文字,最后用qt_restore_gl_state()