2

使用 Qt4(这里使用 PyQt4)来获得两个 QWidget 的交集区域——这对于 QRubberband 在进行选择时特别有用——只需这样做:

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

现在这假设rubberbandmydocumentwidget具有相同的父小部件,即更准确地说,它们的坐标相对于同一原点。这是因为方法调用本身没有父对象,它是一个简单的元组,有 4 个整数和一些方法调用QRect.intersected()QRect

现在在我的情况下rubberband,并且mydocumentwidget有相同的父级,但我对橡皮筋与 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 回答