Qt:让所有孩子都在父母的区域内

时间:2012-12-18 01:26:13

标签: python qt pyqt

这是我的第一个问题,请耐心等待我!

目前在我的程序中,我有一个用作画布的父窗口小部件。用户可以在运行时向父级添加或删除小部件。然后给那些小部件一个绝对位置,也就是说,它们不是由布局定位的。添加后,用户可以任意移动窗口小部件。

我希望用户能够通过拖动它们周围的框来选择一组小部件。我已经编码了在用户拖动时显示矩形的部分。现在,我希望能够检索该矩形(区域)中的所有小部件。

我知道findChild()和findChildren()函数,它们确实会按照预期返回子节点。但我真正需要的是一种将搜索限制在该区域边界的方法,因为“画布”中最可能存在相当多的小部件。 (由于我正在做的事情的性质,可能会有成千上万的小部件散布在一个非常大的区域!)

以下是我的问题:什么是我最好的选择?我应该继续使用findChildren()并循环遍历列表以手动查找区域内的子项。或者我应该使用findChild(x,y)遍历区域内的所有像素?或者也许有一个更简单的解决方案可以加快这个过程?沿着findChildren(x,y,width,height)行的东西?

希望我的问题有道理。我尽力解释事情。谢谢!

1 个答案:

答案 0 :(得分:3)

如果您使用QGraphicsScene而不是自己滚动,则可以使用items(..)方法在特定区域内高效地找到您的孩子。

只能在QGraphicsScene中使用,因为它使用BSP空间加速结构,因此如果您无法在合理的时间内迁移到QGraphicsScene,那么您将自己编写。它并不像听起来那么难,我写了很多边界卷层次结构结构,它们非常简单。