3

これは Linux で発生します。

このコードを実行すると問題が発生します (ウィジェットのペイント イベントで描画しています)。

painter.drawText(0, 0, 1000, 1000, 0, QString("0"), &charBoundingBox);
qDebug() << "bounding box height" << charBoundingBox.height();
qDebug() << "lineSpacing" << painter.fontMetrics().lineSpacing();
qDebug() << "leading" << painter.fontMetrics().leading();
qDebug() << "height" << painter.fontMetrics().height();
qDebug() << painter.font();

以下を出力します。

bounding box height 11 
lineSpacing 7 
leading -1 
height 8 
QFont( "Digital-7,10,-1,5,50,0,0,0,0,0" ) 

文字の境界ボックスの高さが で11、行間隔が であることに注意してください7。これは行送りが負であることも一因ですが、それがなくてもフォントの高さはまだ小さくなっています。

Qt は、返される文字境界ボックスをどのように計算しますか? その高さは明らかに と から派生したものではありませfontMetrics::heightfontMetrics::leading

4

1 に答える 1

1

ペインターによって返される境界ボックスの高さがフォントの高さと同じになるという保証はありません。また、行間隔は、フォントの高さと行送りの合計です。フォントの行送りが負の場合、行間隔は高さよりも小さくなります。

さらに、正しいメトリックを使用していることを確認するには、QFontMetrics(font) を構築する代わりに、おそらく painter.fontMetrics() を使用する必要があります。

いずれにせよ、あなたの状況で上記のどれが起こっているかを確認するには、フォントの行送りとフォントの高さを別々に (painter.fontMetrics() を使用して) 印刷する必要があります。

于 2012-11-18T01:45:33.527 に答える