QGLWidget RenderText()崩溃,文字搞砸了

时间:2015-12-18 06:51:48

标签: qt opengl qt5.5

我将Qt应用程序从Qt4.8.6移植到Qt 5.5.1

移植GUI后,在renderText(x,y,z,font)中随机崩溃。有时文字会混乱,而不是字母和数字显示不同大小的粗体黑色矩形。此代码过去在QT 4.8中运行良好。

我的调用堆栈如下: - ig7icd64.dll!000007fedbeeed17()

[Frames below may be incorrect and/or missing, no symbols loaded for ig7icd64.dll]  

ig7icd64.dll!000007fedbdbcbe1()     

ig7icd64.dll!000007fedbf3aa39()     

ig7icd64.dll!000007fedbf3a751() 

Qt5Guid.dll!QOpenGLFunctions::glDrawElements(unsigned int mode=5, int count=60, unsigned int type=5123, const void * indices=0x000000e2cd2459c8)  Line 730  C++
Qt5OpenGLd.dll!QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngine::GlyphFormat glyphFormat=Format_A8, QStaticTextItem * staticTextItem=0x000000e2fe3a3dd0)  Line 1902   C++

Qt5OpenGLd.dll!QGL2PaintEngineEx::drawTextItem(const QPointF & p={...}, const QTextItem & textItem={...})  Line 1591    C++

Qt5Guid.dll!QPainterPrivate::drawTextItem(const QPointF & p={...}, const QTextItem & _ti={...}, QTextEngine * textEngine=0x0000000000000000)  Line 6501 C++

Qt5Guid.dll!QPainter::drawTextItem(const QPointF & p={...}, const QTextItem & ti={...})  Line 6372  C++

Qt5Guid.dll!QPainter::drawText(const QPointF & p={...}, const QString & str={...}, int tf=0, int justificationPadding=0)  Line 5913 C++

Qt5Guid.dll!QPainter::drawText(const QPointF & p={...}, const QString & str={...})  Line 5697   C++

Qt5Guid.dll!QPainter::drawText(int x=427, int y=175, const QString & s={...})  Line 884 C++

Qt5OpenGLd.dll!qt_gl_draw_text(QPainter * p=0x000000e2ca3c2ee0, int x=427, int y=175, const QString & str={...}, const QFont & font={...})  Line 4776   C++

Qt5OpenGLd.dll!QGLWidget::renderText(double x=8.0000000000000000, double y=0.00000000000000000, double z=0.00000000000000000, const QString & str={...}, const QFont & font={...})  Line 4960   C++

请帮助我。如果有人遇到过类似的问题。我正在使用Windows 8并且驱动程序已更新。崩溃不是在Ubuntu 14上复制,但Ubuntu上的文本也搞乱了。

1 个答案:

答案 0 :(得分:0)

<强> QGLWidget is obsolete in Qt5, you must not use it anymore. End of the story

这个过时的原因以及为什么你有这种奇怪的行为是因为opengl 已经弃用了它的直接模式渲染api ,这是一个过去依赖的api Qt4 opengl元素。实际上,根据供应商的不同,已弃用的功能可能会或可能不会保留在新的驱动程序中。

Opengl文本渲染技术使用矩形来渲染文本。为此,必须启用Alpha混合。从this tutorial on opengl开始,您可以看到窗口的方式

enter image description here

没有启用混合的

看起来像:

enter image description here

第二张图片非常适合您的描述

  

代替字母和数字粗体黑色矩形的不同   尺寸显示。