3

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

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

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

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

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

希望我的问题是有道理的。我试图尽可能地解释事情。谢谢!

4

1 回答 1

3

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

之所以可能,QGraphicsScene是因为它使用了 BSP 空间加速结构,因此如果您无法QGraphicsScene在合理的时间内迁移到 - 您将自己编写。这并不像听起来那么难,我已经编写了许多边界体积层次结构,它们非常简单。

于 2012-12-18T07:58:08.177 回答