Skip to main content
 首页 » 编程设计

python之如何获取两个具有不同父级的 QWidget 的几何图形的交集

2025年05月04日10oomusou

使用 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)