Текст не сглаживается при использовании QPainter::drawText()?
Пока я пытаюсь нарисовать текст используя QPainter::drawText()
текст не сглаживается (по сравнению с MS word)
void TextLabel::paintEvent(QPaintEvent*) {
QPainter p(this);
p.setRenderHint(QPainter::TextAntialiasing);
QFont font;
font.setFamily("Roboto medium");
font.setPointSize(32);
font.setStyleHint(QFont::Helvetica, QFont::PreferAntialias);
p.setPen(_brush);
p.setFont(font);
p.drawText(rect(), Qt::AlignLeft , _text);
}
Qt Doc говорит:
QPainter:: TextAntialiasing -> Указывает, что движок должен сглаживать текст, если это возможно
Это невозможно? Что я должен делать?
Слово одно:
Qt один:
2 ответа
Кажется, это проблема Qt в Window OS (рендеринг шрифтов), она работает с некоторыми шрифтами>=48pt и не работает с некоторыми другими.
Проблема: https://bugreports.qt.io/browse/QTBUG-40052
Мы надеемся, что они исправят это в ближайшем будущем.
Вы можете рисовать с QPainterPath
это дороже, но все же помогает:
void TextLabel::paintEvent(QPaintEvent*) {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(Qt::black);
QFont font;
font.setPointSize(38);
font.setFamily("Roboto");
painter.setFont(font);
painter.drawText(0, 60, "Google");
QPainterPath textPath;
textPath.addText(0, 140, font, "Google");
painter.drawPath(textPath);
}
Робото @ 38pt:
Попробуйте нарисовать через QImage
- QPainter::TextAntialiasing
более вероятно, будет удостоен чести таким образом.
QImage image(size(), QImage::Format_ARGB32_Premultiplied);
{
QPainter p(&image);
p.setRenderHint(QPainter::TextAntialiasing);
QFont font;
font.setFamily("Roboto medium");
font.setPointSize(16);
font.setStyleHint(QFont::Helvetica, QFont::PreferAntialias);
p.setPen(_brush);
p.setFont(_font);
p.drawText(rect(), Qt::AlignLeft , _text);
}
QPainter p(this);
p.drawImage(rect(), image);
Примечание: если это работает, тогда используемый QImage, вероятно, должен быть закрытым членом класса, а не воссоздавать его каждый раз, когда вызывается paintEvent.