我将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上的文本也搞乱了。
答案 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开始,您可以看到窗口的方式
没有启用混合的看起来像:
第二张图片非常适合您的描述
代替字母和数字粗体黑色矩形的不同 尺寸显示。