[Interest] Odd crash with QPainter + QOpenGLWidget
Matthew Woehlke
mwoehlke.floss at gmail.com
Wed Mar 27 22:48:16 CET 2019
I've cargo-culted some code to render text over a QOpenGLWidget from
another project:
void MyWidget::paintEvent(QPaintEvent* event)
{
QOpenGLWidget::paintEvent(event);
auto const& text = /* elided */;
QPainter painter{this};
painter.setPen(Qt::white);
painter.setFont(font());
painter.drawText(rect(), Qt::AlignCenter, text);
painter.end();
}
In the "donor" project, this works fine, but the "recipient" project is
crashing on exit:
==12997== Invalid read of size 8
==12997== at 0x5D204E4: QObject::thread() const (qobject.cpp:1420)
==12997== by 0x598A728: QOpenGLVertexArrayObjectPrivate::destroy()
(qopenglvertexarrayobject.cpp:212)
==12997== by 0x598A9AA:
QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()
(qopenglvertexarrayobject.cpp:392)
==12997== by 0x5987286:
QOpenGLTextureGlyphCache::~QOpenGLTextureGlyphCache()
(qopengltextureglyphcache.cpp:87)
==12997== by 0x59872AC:
QOpenGLTextureGlyphCache::~QOpenGLTextureGlyphCache()
(qopengltextureglyphcache.cpp:93)
==12997== by 0x576ADAB: ~QLinkedListNode (qlinkedlist.h:69)
==12997== by 0x576ADAB:
QLinkedList<QFontEngine::GlyphCacheEntry>::freeData(QLinkedListData*)
[clone .isra.119] (qlinkedlist.h:345)
==12997== by 0x5BB10E8: QHashData::free_helper(void
(*)(QHashData::Node*)) (qhash.cpp:572)
==12997== by 0x576A9BA: freeData (qhash.h:585)
==12997== by 0x576A9BA: ~QHash (qhash.h:254)
==12997== by 0x576A9BA: QFontEngine::~QFontEngine() (qfontengine.cpp:271)
==12997== by 0x18C155FC: QFontEngineFT::~QFontEngineFT()
(qfontengine_ft.cpp:794)
==12997== by 0x576AAE4: QFontEngineMulti::~QFontEngineMulti()
(qfontengine.cpp:1792)
==12997== by 0x18C1E41C:
QFontEngineMultiFontConfig::~QFontEngineMultiFontConfig()
(qfontenginemultifontconfig.cpp:57)
==12997== by 0x575F25E: QFontCache::clear() (qfont.cpp:2796)
==12997== Address 0x8 is not stack'd, malloc'd or (recently) free'd
Any ideas why? Is this a reasonable approach to rendering text in a
QOpenGLWidget, or is there a better way? (I am "fairly confident" that
the problem is the text rendering, above, since the crash goes away if I
comment out said code.)
--
Matthew
More information about the Interest
mailing list