使用Qt在图像上绘制文本

ned*_*eda 7 c++ qt qpainter qimage drawtext

我想在图像上绘制文本。我使用此代码,但是在图像上看不到任何文本。

void ImageSaver::save(const QString &path) const {       
   QImage image(img_);
   QPainter p(&image);
   p.setPen(QPen(Qt::red));
   p.setFont(QFont("Times", 12, QFont::Bold));
   p.drawText(image.rect(), Qt::AlignCenter, "Text");
   image.save(path);
}
Run Code Online (Sandbox Code Playgroud)

cbu*_*art 6

QPainter必须在映像有效之前完成I / O操作。您可以 QPainter对象销毁执行此操作也可以使用begin/ end方法。

bool ImageSaver::save(const QString &path) const {    
  QImage image(img_);
  QPainter p;
  if (!p.begin(&image)) return false;

  p.setPen(QPen(Qt::red));
  p.setFont(QFont("Times", 12, QFont::Bold));
  p.drawText(image.rect(), Qt::AlignCenter, "Text");
  p.end();

  return image.save(path);
}
Run Code Online (Sandbox Code Playgroud)

PS:我添加了bool返回值以更好地跟踪错误。

  • 注意:为了优化渲染(例如,在 QWidget 的 PaintEvent 中),最好使用 **QStaticText** 而不是使用 p.drawText。然而,对于一次性使用,此解决方案是等效的。 (2认同)