4

QPainterPath があります。QPainterPath の y 座標を x で求める必要があります。

QPainterPath で intersected() メソッドを見つけました。そこで、交差点の結果としてポイントを見つけるために、パスの境界四角形の左端から右端までの線である新しい QPainterPath を作成しました。

intersects() メソッドは true を返します。しかし、intersected() は空のパスを返します。

line の代わりに height = 1 の rect を使用すると、すべてが機能します。

たぶん、QPainterPath と行の交差点を見つける方法をもっとよく知っているでしょうか?

4

1 に答える 1

2

ドキュメントによると:

QPainterPath QPainterPath :: intersected(const QPainterPath&p)const

このパスの塗りつぶし領域とpの塗りつぶし領域の交点であるパスを返します。ベジェ曲線の交差を行うことは数値的に不安定であるため、ベジェ曲線は線分に平坦化される場合があります。

行に塗りつぶし領域がないため、この関数は機能しないように見えます。

QGraphicsSceneを使用してQPainterPathを表示している場合は、メソッドcollidingItemsを使用できます。

QList QGraphicsScene :: collidingItems(const QGraphicsItem * item、Qt :: ItemSelectionMode mode = Qt :: IntersectsItemShape)const

itemと衝突するすべてのアイテムのリストを返します。衝突は、QGraphicsItem :: collidesWithItem();を呼び出すことによって決定されます。衝突検出はモードによって決定されます。デフォルトでは、形状がアイテムと交差するか、アイテムの形状内に含まれるすべてのアイテムが返されます。アイテムは積み重ねの降順で返されます(つまり、リストの最初のアイテムが一番上のアイテムで、最後のアイテムが一番下のアイテムです)。

残念ながら、QPainterは同じ機能を持っていないようです。長い長方形を作成するあなたの方法は、これを行うためのより簡単な方法かもしれないと思います。

于 2012-02-22T13:07:40.260 に答える