2

Qt4 (ここでは PyQt4 を使用) を使用して、2 つの QWidget の交差領域を取得します。これは、選択を行うときに QRubberband で特に役立ちます。

intersection = rubberband.geometry().intersected(mydocumentwidget.geometry())

rubberbandこれは、と が同じ親ウィジェットを持っていることを前提としmydocumentwidgetています。つまり、より正確には、それらの座標は同じ原点を基準にしています。これは、メソッド呼び出しQRect.intersected()自体QRectが親を持たず、4 つの整数といくつかのメソッド呼び出しを持つ単純なタプルであるためです。

私の場合、同じ親rubberbandmydocumentwidget持っていますが、ラバーバンドと mydocument の子、つまりドキュメントのページとの交差に興味があります。ただし、ページは座標を画面上の別のポイントに参照します。

ラバーバンドとページ ウィジェットの交差を計算するにはどうすればよいですか? 親の親を参照するように座標を変換する方法はありますか? もちろん、自分で計算することはできますが、あまりきれいではないと思います。Qt4 はこれを自動的に変換する手段を提供していますか?

4

1 に答える 1

1

できることは、QRect のポイントを親ウィジェットにマップすることです。QPoints をさまざまなターゲット (親、その他、グローバル) にマップできますが、特に にマップしたいので、次のmydocumentwidgetようにします。

doc_child = getChildOfDocument() # pseudo
rect = doc_child.geometry()

mappedPoint = doc_child.mapToParent(rect.topleft())
# alternative #
# mappedPoint = doc_child.mapTo(mydocumentwidget, rect.topleft()) 

mappedRect = QtCore.QRect(mappedPoint, rect.size())
intersection = rubberband.geometry().intersected(mappedRect)
于 2012-05-21T03:31:29.157 に答える