2016-06-17 4 views
0

(MS 워드에 비교)QPainter :: drawText()를 사용하는 중에 텍스트가 앤티 앨리어싱되지 않습니다? 내가 텍스트 앤티 앨리어싱되지 <code>QPainter::drawText()</code>를 사용하여 텍스트를 그릴려고하지만

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는 박사는 말한다 :

QPainter를 ::이 TextAntialiasing ->이 나타냅니다 엔진이해야 앤티 앨리어싱 텍스트 가능하면

이것이 불가능합니까? 어떻게해야합니까?

단어 하나를

enter image description here

Qt는 하나의하십시오 QImage를 통해

enter image description here

+0

나는 Qt는 하나 실제로 요청 된 글꼴 인 경우 확실하지 않다. "Roboto medium"이로드되었는지 확인할 수 있습니다. –

+0

@ JeffreyvandeGlind. 이미 Times New Roman으로 테스트되었지만 이상한 문제가 있습니다. ( – IMAN4K

+0

폰트 변경과의 차이는 예상하지 않았지만 프로그램에서 눈에 띄지 않는 문제를 지적하고 싶었습니다. –

답변

0

시도 그림이 - 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으로 그릴 수 있습니다 더 비싼하지만 여전히 도움 : 38pt @

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

enter image description here