2012-06-04 33 views
3

我在uint8_t緩衝區中有一個圖像,我試圖用QImage作爲包裝來在圖像上寫文本。我用drawLine()沒有問題,但是drawText()使程序崩潰。下面的代碼是一個boost線程的一部分,我想在每個圖像上遍歷函數時爲它們寫文本。 Qt中有什麼錯誤我不知道?在QImage崩潰程序上的drawText()

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 
+0

你有沒有檢查framebuffer是否有效和足夠大? –

+0

是的,我有。當我註釋掉drawText行時,drawline命令按預期工作。 – JonnyCplusplus

+0

1,這是一個完整的Qt應用程序的一部分?你在開始時是否有QApplication? 2,你是否叫p.end(),當某些事情超出範圍而且錯誤只是指向最後一個操作時,它可能實際上會崩潰。 –

回答

1

我的項目被設置爲QCoreApplication(我沒有GUI)。將它改爲QApplication的確有竅門!

1

只是一個猜測...(我以前從未見過這個錯誤,但已經對線程其他字體的問題。)

字體呈現在後臺線程可以在Qt的一個小片狀,取決於它是如何編譯的。檢查系統上的QFontDatabase::supportsThreadedFontRendering的值。

注意的文檔:

如果字體渲染的GUI線程之外支持返回true,否則 假。換句話說,返回值爲false意味着在GUI線程之外的所有QPainter :: drawText()調用都不會產生 可讀輸出。