2

現在、単純なQGraphicsItem. レンダリングのパフォーマンスを向上させるために、いくつかの内部コンポーネントのバウンディング ボックスがコンストラクターで計算されます。

ただし、この画像に示すように、テキスト幅に実際の問題があります。

悪い四角形

計算された BB を緑色の線でレンダリングしたので、何が起こっているかを簡単に確認できます。QFontMetrics::boundingRect(..)イタリック体やフォントのアンチエイリアスを考慮していないため、完全に正確ではないことはわかっていますが、それは数ピクセルを超えることはありません。

最上部の「時計」の境界矩形を計算する方法は次のとおりです。

QFont font = Sy_application::font();
font.setPointSize( font.pointSize() * 2 );
QFontMetrics fontMet( font );
BB_ = fontMet.boundingRect( getNode()->getName() );
BB_.moveTop( 0.0 );

そして、これを使用してテキストをレンダリングする方法は次のQGraphicsItem::paint(..)とおりです。

QFont font = Sy_application::font();
font.setPointSize( font.pointSize() * 2 );
painter->setFont( font );
painter->setPen( Qt::black );
painter->drawText( BB_.bottomLeft(), getNode()->getName() );

いくつかのデバッグ出力を確認しましたBB_が、作成時と使用時で変わりません。実際、fontMet.boundingRect( getNode()->getName() );それを作成する は、幅 45 単位の境界矩形を返します。時計アイコンは 46 です。したがって、間違いなく間違っています。

誰かが私がどのようにQFontMetrics::boundingRect(..)間違って使用しているかを見ることができますか?

4

1 に答える 1

2

QGraphicsViewコンストラクターのQPaintDevice引数にを追加するとQFontMetrics、問題が修正されました。おそらく、メトリック計算で考慮されていないビューで何らかの変換が行われていると思われます。

于 2012-08-19T08:55:40.700 に答える