Hallo iedereen,
Het probleem is als volgt:
Ik heb een script gemaakt die via de opencv library een afbeelding pakt van mijn webcam. Vervolgens converteer ik deze naar een Qt QImage object. Dit gaat allemaal nog zoals het moet. Ook kan ik deze QImage object scalen, mirroren, inverse, etc. Maar zodra ik met een QPainter object tekst probeer toe te voegen aan de QImage object gaat het fout. Zodra ik de painter.drawText functie aan roep krijg ik een Segmenatie fout error.
Toen ik met valgrind ging kijken naar wat er fout ging vond ik dit (tussen de vele foutmeldingen):
Process terminating with default action of signal 11 (SIGSEGV)
==30930== Access not within mapped region at address 0x4
==30930== at 0x4FECA37: QObject::thread() const (qobject.cpp:1283)
==30930== by 0x46A28EA: QFontPrivate::engineForScript(int) const (qfont.cpp:264)
==30930== by 0x46DCCEC: QTextEngine::fontEngine(QScriptItem const&, QFixed*, QFixed*) const (qtextengine.cpp:1747)
==30930== by 0x46DFF79: QTextEngine::shapeTextWithHarfbuzz(int) const (qtextengine.cpp:1112)
==30930== by 0x46E0EE9: QTextEngine::shapeText(int) const (qtextengine.cpp:874)
==30930== by 0x46E1337: QTextEngine::shape(int) const (qtextengine.cpp:1344)
==30930== by 0x46E46DD: QTextEngine::shapeLine(QScriptLine const&) (qtextengine.cpp:844)
==30930== by 0x45C34D3: QPainter::drawText(QPointF const&, QString const&, int, int) (qpainter.cpp:5669)
==30930== by 0x45C3A8A: QPainter::drawText(QPointF const&, QString const&) (qpainter.cpp:5642)
==30930== by 0x804A5DB: vdCam::save(QString const&, QString const&, int, bool, double, bool, bool, QVector<vdCam_text> const&) (in /mnt/data/Data/Leon/Code/C++/vdCam/vdCam)
==30930== by 0x804C4B3: main (in /var/vdCam/vdCam)
De code voor het tekenen van de tekst komt hier op neer:
Het probleem ligt niet aan de painter object zelf, namelijk als ik drawLine doe gaat het wel gewoon goed. Is dit een bug in Qt 4.5 of doe ik gewoon iets fout? Ik heb zelf niets kunnen vinden over deze error. In alle voorbeelden doen ze het namelijk ook zo...
Het probleem is als volgt:
Ik heb een script gemaakt die via de opencv library een afbeelding pakt van mijn webcam. Vervolgens converteer ik deze naar een Qt QImage object. Dit gaat allemaal nog zoals het moet. Ook kan ik deze QImage object scalen, mirroren, inverse, etc. Maar zodra ik met een QPainter object tekst probeer toe te voegen aan de QImage object gaat het fout. Zodra ik de painter.drawText functie aan roep krijg ik een Segmenatie fout error.
Toen ik met valgrind ging kijken naar wat er fout ging vond ik dit (tussen de vele foutmeldingen):
Process terminating with default action of signal 11 (SIGSEGV)
==30930== Access not within mapped region at address 0x4
==30930== at 0x4FECA37: QObject::thread() const (qobject.cpp:1283)
==30930== by 0x46A28EA: QFontPrivate::engineForScript(int) const (qfont.cpp:264)
==30930== by 0x46DCCEC: QTextEngine::fontEngine(QScriptItem const&, QFixed*, QFixed*) const (qtextengine.cpp:1747)
==30930== by 0x46DFF79: QTextEngine::shapeTextWithHarfbuzz(int) const (qtextengine.cpp:1112)
==30930== by 0x46E0EE9: QTextEngine::shapeText(int) const (qtextengine.cpp:874)
==30930== by 0x46E1337: QTextEngine::shape(int) const (qtextengine.cpp:1344)
==30930== by 0x46E46DD: QTextEngine::shapeLine(QScriptLine const&) (qtextengine.cpp:844)
==30930== by 0x45C34D3: QPainter::drawText(QPointF const&, QString const&, int, int) (qpainter.cpp:5669)
==30930== by 0x45C3A8A: QPainter::drawText(QPointF const&, QString const&) (qpainter.cpp:5642)
==30930== by 0x804A5DB: vdCam::save(QString const&, QString const&, int, bool, double, bool, bool, QVector<vdCam_text> const&) (in /mnt/data/Data/Leon/Code/C++/vdCam/vdCam)
==30930== by 0x804C4B3: main (in /var/vdCam/vdCam)
De code voor het tekenen van de tekst komt hier op neer:
C++:
1
2
3
4
5
6
7
8
| // painter is QPainter object, tmp is een QImage object (al met data) painter.begin(&tmp); painter.setPen(QPen(QColor("#FF0000"))); painter.setFont(QFont("Arab", 12, QFont::Bold, false)); painter.drawText(0, 0, text); // Hier gaat het fout |
Het probleem ligt niet aan de painter object zelf, namelijk als ik drawLine doe gaat het wel gewoon goed. Is dit een bug in Qt 4.5 of doe ik gewoon iets fout? Ik heb zelf niets kunnen vinden over deze error. In alle voorbeelden doen ze het namelijk ook zo...