の境界線を描く方法はQGraphicsItem
?オーバーロードされたペイント方法の単純なpainter->drawRect( boundingRect() )
方法は正しくありません(右下隅がアイテムの外側にあります)。
4 に答える
グラフィックスと描画形状の座標系は、まっすぐにするのが難しい場合があります。テスト図面を正しくプログラミングすることはよくありますが、それはあなたが描くように言っていることを正確に描いています。座標系を理解する必要があります。このページでは、の「1ピクセル幅のペン」の画像に特に注意してくださいQRectF
。
QPainter :: drawRect()のドキュメントには、実際の幅が記載されていることに注意してください。
塗りつぶされた長方形のサイズはrectangle.size()です。ストロークされた長方形のサイズは、rectangle.size()にペンの幅を加えたものになります。
それを考えると、境界の長方形を使用するよりも少し複雑なものが必要になると思います。
QRect r = boundingRect();
QPen p = painter->pen();
painter->drawRect(QRect(r.x(), r.y(), r.width()-p.width(), r.height()-p.width()));
QGraphicsEffectはここであなたの友達かもしれません。サブクラス化して、任意のQGraphicsItemの周囲に境界線を描画できます。boundingRectFor()
余分な境界線を含めるために再実装することを忘れないでください。
私は自分の問題を見つけました。すべてのアドバイスに感謝しますが、今では私の問題は他の場所にあったことがわかりました。
QRectF()
アイテムのboundingRectに適合するを描画できますが、 QGraphicsView
(メソッドを使用するか、独自の実装を使用するかに関係なく)スケーリングfitInView()
すると、境界線の表示にエラーが発生します。
rectの1つまたは2つのラインが他のラインよりもタイトになることはめったにありません。QGraphicsItem
同時にsでもある私のsと関係があるのではないかと思いますQGraphicsSvgItem
。