Text from QPainter much nicer than from QPainterPath

c++, qpainter, qt, qt5

Solution

According to the Qt documentation for adding text to a QPainterPath: -

Adds the given text to this path as a set of closed subpaths created from the font supplied.

So there is a conversion going on here, which is why it doesn't look the same. If you need to rotate text, you could try rotating the QPainter before rendering and then restoring it afterwards. Alternatively, if you can use QGraphicsView and QGraphicsDisplay instead of just rendering onto the widget, there is the class QGraphicsTextItem which may help.

But overall, it's the conversion to the set of closed subpaths that is responsible for the different output of text quality.

Problem

I want to draw text using `QPainter`, and I want to use `QPainterPath` first (because ultimately I want to rotate the text in all sorts of ways). However, I find that the text produced by `QPainterPath` is much uglier than the text produced by `QPainter`. The following 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(); } ``` produces the following result: The former is clearly much cleaner and nicer, especially in smaller fonts. What should I do to get the same result from `QPainterPath`? I'm producing the above results on a Windows 7 computer, with Qt 5.0.

Original source