Ich möchte Text mit QPainter
zeichnen, und ich möchte zuerst QPainterPath
verwenden (weil ich schließlich den Text auf alle möglichen Arten drehen möchte). Ich finde jedoch, dass der von QPainterPath
produzierte Text viel hässlicher ist als der von QPainter
produzierte Text.Text von QPainter viel schöner als von QPainterPath
Der folgende Code:
void MyWidget::paintEvent(QPaintEvent* /*event*/) {
QFont font;
font.setStyleHint(QFont::Times, QFont::PreferAntialias);
font.setPointSize(30);
QPainter painter;
painter.begin(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(Qt::black);
painter.setFont(font);
painter.drawText(10, 40, "Hello World");
QPainterPath textPath;
textPath.addText(10, 100, font, "Hello world");
painter.drawPath(textPath);
painter.end();
}
erzeugt das folgende Ergebnis:
Ersteres ist eindeutig viel sauberer und schöner, vor allem in kleineren Schriften. Was soll ich tun, um das gleiche Ergebnis von QPainterPath
zu bekommen?
Ich produziere die obigen Ergebnisse auf einem Windows 7 Computer, mit Qt 5.0.
Recht, zumindest ich, was Sie meinen, dass es eine Umwandlung los ist, obwohl ich verstehe nicht, was das bedeutet in der Praxis (geschlossene Subpfade?), und wenn es etwas ist, das kann Gemieden werden. Leider macht das Drehen von 'QPainter' zuerst die Sache schlimmer, weil Anti-Aliasing für gedrehten Text nicht unterstützt wird. – Yellow
Ich weiß, dass es Java ist, aber die Antwort auf diese Frage erläutert kurz Unterpfade: http://StackOverflow.com/Questions/4662295/what-is-path-subpath-in-java2d – TheDarkKnight
Wie zu fragen, ob es vermieden werden kann, wenn Sie verwenden QPainterPath, ich glaube nicht, dass Sie genau das gleiche Ergebnis erhalten. Möglicherweise können Sie einige der Renderinghintergründe für den Maler festlegen, z. B. QPainter :: TextAntialiasing. Beachten Sie, dass es sich um Flags handelt, die in Kombination verwendet werden können. – TheDarkKnight