在 QImage 上绘制文本() 崩溃程序



我在缓冲区中有一个图像uint8_t我正在尝试使用 QImage 作为包装器在图像上写入文本。 我使用drawLine()没有任何问题,但是drawText()使程序崩溃。 下面的代码是 boost 线程的一部分,我想在其中向每个图像写入文本,因为它遍历函数。 Qt中是否有我不知道的错误?

uint8_t *frameBuffer; // this contains image pixels
QImage img(frameBuffer, sizeX, m_sizeY, QImage::Format_RGB888);
QPainter p(&img);
p.setPen(QPen(Qt::green));
p.setFont(QFont("Times", 10, QFont::Bold));
p.drawLine(img.rect().bottomLeft().x(), img.rect().bottomLeft().y()-10,
           img.rect().bottomRight().x(), img.rect().bottomRight().y()-10);  //works!
p.drawText(img.rect(), Qt::AlignCenter, "Help");  //crashes program

我的项目被设置为QCoreApplication(我没有GUI)。 将其更改为 QApplication 就行了!

只是一个猜测...(我以前从未见过此错误,但在线程上遇到了其他字体问题。

在Qt中,后台线程上的字体渲染可能有点不稳定,具体取决于它的编译方式。检查系统上 QFontDatabase::supportsThreadedFontRendering 的值。

请注意文档:

如果在 GUI 线程外部支持字体呈现,则返回 true, 否则为假。换句话说,返回值为 false 意味着 GUI 线程外的所有 QPainter::d rawText() 调用都不会产生 可读输出。

最新更新