2016-06-17 4 views
0

В то время как я пытаюсь нарисовать текст, используя QPainter::drawText() текст не сглаженных (по сравнению с MS Word)Текст не сглажен при использовании QPainter :: drawText()?

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 -> Указывает, что двигатель, должен сглаживать текст если возможно

Это невозможно? Что мне делать?

слово один:

enter image description here

в Qt один:

enter image description here

+0

Я не уверен, что если Qt один фактически запрошенный шрифт. Возможно, вам захочется проверить, загружен ли «носитель Roboto». –

+0

@JeffreyvandeGlind. Уже тестировался с «Times New Roman», но такой же странный вопрос :( – IMAN4K

+0

Я не ожидал разницы с изменением шрифта, я просто хотел указать на возможную незаметную проблему в вашей программе. –

ответ

0

Try картину через 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 вызывается.

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:

enter image description here

Смежные вопросы