打印

时间:2016-08-12 16:49:28

标签: c++ qt text printing qpainterpath

使用Qt 5.4.2,我使用QPainterPath来渲染文本,因为文本可以分成字符,每个字符沿曲线呈现。我看到跨平台和打印时的不同结果。为了呈现文字,我尝试使用QPainter的{​​{1}}和drawPath()方法。

OS X 10.11.6:

  • drawPolygon():印度文字的第一行中有一些不应存在的空白,无论是在drawPath还是在我打印时。
  • QGraphicsView:顶线应该是实心的,在drawPolygon和我打印时都是如此。但是,在打印时,我会在文本中的各个随机点之间获得许多额外的细线。

窗口7:

  • QGraphicsView:与Mac上的相同:顶线有差距,drawPath和打印时都有差距。
  • QGraphicsViewdrawPolygon是正确的(没有间隙),但打印仍然在顶行有间隙,但它没有像在Mac上打印时那样的额外细线。因此,使用QGraphicsView进行打印会产生与使用drawPolygon进行打印相同的错误输出。

Here's演示这些问题的示例应用。这是我的示例应用程序中drawPath子类的绘制代码:

QGraphicsItem

以下是创建场景的示例应用程序中的代码,并将两个void MapGraphicsTextElement::paint(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/) { painter->setFont(font_); painter->setRenderHint(QPainter::Antialiasing); painter->setBrush(QBrush(QColor(Qt::black))); painter->setPen(Qt::NoPen); QPainterPath path; path.addText(0, 0, font_, text_); if (fix_gaps_) { QPolygonF poly = path.toFillPolygon(); painter->drawPolygon(poly, Qt::WindingFill); } else { painter->drawPath(path); } } 子类对象添加到场景中:

QGraphicsItem

如何制作QGraphicsScene * PrintsLines::CreateScene() { QGraphicsScene *scene = new QGraphicsScene(0, 0, 500, 500, this); QScopedPointer<MapGraphicsTextElement> item(new MapGraphicsTextElement()); item->SetText("My test text here."); item->SetFixGaps(fix_gaps_->isChecked()); QFont item_font("Arial"); item_font.setPixelSize(12); item->SetFont(item_font); item->setPos(128, 115); scene->addItem(item.take()); QScopedPointer<MapGraphicsTextElement> item2(new MapGraphicsTextElement()); item2->SetText("मेदितेरेनियन सि"); item2->SetFixGaps(fix_gaps_->isChecked()); QFont item_font2("Arial"); item_font2.setPixelSize(48); item2->SetFont(item_font2); item2->setPos(128, 215); scene->addItem(item2.take()); return scene; } 中呈现的内容并且打印的内容是否相同且正确?如果OS X和Windows需要不同的解决方案,那没关系。或者如果需要更新版本的Qt来解决这个问题,我可以升级Qt。

更新:

正如Kuba Ober建议的那样,我已经通过下面这个简单的应用程序演示了打印错误。我不知道该如何从这里开始。

QGraphicsView

1 个答案:

答案 0 :(得分:0)

painter.drawText()正致力于打印和制作pdf。 painter.drawPolygon()正在进行屏幕渲染并输出光栅图像(png&amp; jpg)。这种解决方法似乎足以解决我的问题。