위젯에 텍스트를 수직이 아닌 각도, 즉 0과 90 사이의 각도로 그립니다. 텍스트 자체를 그리는 데는 문제가 없지만, 결과 텍스트는 매우 위글/고르지 않게 그려집니다.qt - 수직이 아닌 각도로 QPainter :: rotate가 울퉁불퉁 한 선을 만듭니다.
아래 그림에서 나는 45도 각도로 텍스트 줄을 그리고 있습니다. 텍스트의 첫 번째 줄은 밑줄 ("_____")이 많고 두 번째 줄은 "멀티 스레드"입니다. 문제를 강조 표시하기 위해 줄 대신 밑줄을 그립니다. 당신이 볼 수 있듯이
는 첫 번째 줄은 분명히 텍스트가 균일하게 그려지지 않습니다 보여줍니다. 두 번째 줄에서는 더 미묘하지만 여전히 보입니다.
직각 (0, 90, 180 등)으로 그려도이 효과가 나타나지 않습니다. 이런 일이 일어나는 이유는 무엇입니까?
Qt 5.7.0을 사용하는 Windows 10에서 작업하고 있습니다.
최소 코드 예제 :
void MyWidget::paintEvent(QPaintEvent * /* event */)
{
QFont font;
font.setPointSize(16);
font.setStyleStrategy(QFont::StyleStrategy::PreferAntialias);
setFont(font);
QImage image(size(), QImage::Format_ARGB32_Premultiplied);
QPainter imagePainter(&image);
imagePainter.initFrom(this);
imagePainter.setFont(font());
imagePainter.setRenderHint(QPainter::Antialiasing, true);
imagePainter.eraseRect(rect());
// Set logical origo in the middle of the image
m_window = QRect(
- width()/2, // x
- height()/2, // y
width(), // w
height() // h
);
imagePainter.setWindow(m_window);
m_viewport = QRect(
0, // x
0, // y
width(), // w
height() // h
);
imagePainter.setViewport(m_viewport);
draw(imagePainter);
imagePainter.end();
QPainter widgetPainter(this);
widgetPainter.drawImage(0, 0, image);
}
void MyWidget::draw(QPainter & painter)
{
painter.save();
// Rotate anti-clockwise
painter.rotate(-m_degrees);
painter.drawText(m_window.top(), 0, tr("Multithreads"));
painter.drawText(m_window.top(), 15, tr("__________"));
painter.restore();
}
당신이 앤티 엘리 어싱을 사용하여 사용해 볼 수 있습니까? –
한 번에 글자 또는 문자열을 그립니다. – Yakk
앤티 앨리어싱을 사용할 수 있으며 전체 문자열을 그립니다. – edvardsp