当我尝试使用QPainter::drawText()
绘制文字时,文字没有抗锯齿(与MS词相比)
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 one:
答案 0 :(得分:0)
尝试通过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时重新创建它。
答案 1 :(得分:0)
似乎问题是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);
}
Roboto @ 38pt: