3

我在 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
4

2 回答 2

5

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

于 2012-06-04T19:08:39.810 回答
1

只是一个猜测......(我以前从未见过这个错误,但线程上有其他字体问题。)

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

注意文档:

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

于 2012-06-04T17:01:04.747 回答