使用 Qt4(此处使用 PyQt4)获取两个 QWidget 的交集区域——这对于 QRubberband 在进行选择时特别有用——只需执行以下操作:
intersection = rubberband.geometry().intersected(mydocumentwidget.geometry())
现在假设 rubberband 和 mydocumentwidget 具有相同的父窗口小部件,即更准确地说,它们的坐标相对于相同的原点。这是因为方法调用是 QRect.intersected() 并且 QRect 本身没有父级,它是一个包含 4 个整数和一些方法调用的简单元组。
现在在我的例子中,rubberband 和 mydocumentwidget 具有相同的父级,但我对橡皮筋与 mydocument 的子级(即文档的页面)的交叉感兴趣。 然而,页面将它们的坐标引用到屏幕上的不同点。
我怎样才能计算出橡皮筋和我的页面小部件之间的交集?有没有办法将坐标转换为引用 parent 的 parent ?我当然可以自己计算数学,但我认为它不是很清楚。 Qt4 是否提供任何方法来自动转换它?
请您参考如下方法:
您可以做的是将 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)
