如何获得两个QWidgets与不同父母的几何结构?

时间:2012-05-21 03:03:46

标签: python qt4 pyqt

使用Qt4(这里使用PyQt4)来获得两个QWidgets的交叉区域 - 这对于选择时QRubberband特别有用 - 一个只是:

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

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

现在在我的情况下,rubberbandmydocumentwidget拥有相同的父母,但我对橡皮带与mydocument的孩子,即文件的页面的部分感兴趣。 然而,页面会将其坐标引用到屏幕上的不同点。

如何计算橡皮筋和我的页面小部件之间的交集?有没有办法转换坐标以引用父母的父母?我当然可以自己放下数学,但我认为它不是很干净。 Qt4是否提供了自动转换的方法?

1 个答案:

答案 0 :(得分: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)