使用Qt 5.4.2,我使用QPainterPath
来渲染文本,因为文本可以分成字符,每个字符沿曲线呈现。我看到跨平台和打印时的不同结果。为了呈现文字,我尝试使用QPainter
的{{1}}和drawPath()
方法。
OS X 10.11.6:
drawPolygon()
:印度文字的第一行中有一些不应存在的空白,无论是在drawPath
还是在我打印时。QGraphicsView
:顶线应该是实心的,在drawPolygon
和我打印时都是如此。但是,在打印时,我会在文本中的各个随机点之间获得许多额外的细线。窗口7:
QGraphicsView
:与Mac上的相同:顶线有差距,drawPath
和打印时都有差距。QGraphicsView
:drawPolygon
是正确的(没有间隙),但打印仍然在顶行有间隙,但它没有像在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
答案 0 :(得分:0)
painter.drawText()
正致力于打印和制作pdf。 painter.drawPolygon()
正在进行屏幕渲染并输出光栅图像(png&amp; jpg)。这种解决方法似乎足以解决我的问题。