1

我将我的 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 上也会出现文本混乱。

4

1 回答 1

0

QGLWidget 在 Qt5 中已经过时,你不能再使用它了。故事的结局

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

Opengl 文本渲染技术使用矩形来渲染文本。为此,必须启用 Alpha 混合。从opengl 的本教程中,您可以看到窗口

在此处输入图像描述

没有启用混合看起来像:

在此处输入图像描述

第二张图很符合你的描述

显示不同大小的粗体黑色矩形而不是字母和数字。

于 2015-12-18T09:38:41.847 回答