私はウィジェット上に垂直でない角度、つまり0〜90の角度でテキストを描画しようとしています。テキスト自体を描画することは問題ありませんが、結果として得られるテキストは非常にウイグル/不均一に描画されます。qt - 垂直でない角度でQPainter :: rotateはウィグルラインを発生させます
以下の図では、テキストの行を45度の角度で描画しています。テキストの最初の行は多くのアンダースコア( "_____")で、テキストの2行目は "マルチスレッド"です。問題を強調するためだけの行ではなく、下線が引かれています。
あなたが見ることができるように、明らかに最初の行は、テキストが均等に描かれていない示しています。 2行目では微妙ですが、まだ目に見えます。
垂直角度(0,90,180など)で描画してもこの効果はありません。これが起こっている理由は何ですか?
私はWindows 10でQt 5.7.0を使用しています。
最小限のコードの例:
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