2016-06-17 36 views
0

Während ich versuche, Text zu zeichnen mit QPainter::drawText() der Text nicht Anti-Aliasing ist (im Vergleich zu MS Word)Text wird nicht antialiased, während QPainter :: drawText() verwendet wird?

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 sagt:

QPainter :: TextAntialiasing -> Zeigt an, dass der Motor sollte Anti-Aliasing Text wenn möglich

Ist das unmöglich? Was soll ich tun? ein

Das Wort:

enter image description here

Die Qt ein:

enter image description here

+0

Ich bin nicht sicher, ob die Qt man tatsächlich die gewünschte Schriftart ist. Vielleicht möchten Sie prüfen, ob "Roboto medium" geladen ist. –

+0

@ JeffreyvandeGlind. Bereits mit "Times New Roman" getestet, aber das gleiche seltsame Problem :( – IMAN4K

+0

Ich habe keinen Unterschied mit der Änderung der Schriftart erwartet, ich wollte einfach auf ein mögliches unbemerktes Problem in Ihrem Programm hinweisen. –

Antwort

0

Try Malerei über eine QImage - die QPainter::TextAntialiasing ist eher auf diese Weise geehrt werden.

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); 

Hinweis: Wenn das funktioniert, dann ist die QImage verwendete wahrscheinlich ein privates Klassenmitglied sein soll, anstatt sie jedes Mal neu zu erstellen paintEventO aufgerufen wird.

0

Scheint, es ist ein Problem Qt hat auf Windows OS (font rendering) und arbeitet mit einigen Schriftarten> = 48pt und funktioniert nicht mit anderen.

Ausgabe: https://bugreports.qt.io/browse/QTBUG-40052

Wir hoffen, dass sie es in naher Zukunft beheben.

Sie können mit QPainterPath ziehen es ist teurer, aber noch hilft:

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:

enter image description here