Qt:获取父控件区域内的所有子控件

3
这是我第一个问题,还请见谅!
目前,在我的程序中,我有一个作为画布的父窗口小部件。用户可以在运行时添加或删除父窗口小部件中的其他小部件 。这些小部件会被赋予绝对位置,也就是说,它们不会被任何布局所定位。一旦添加后,用户就可以任意移动小部件。
我想让用户通过拖动框框选择一组小部件。我已经编码了显示矩形的部分,而用户正在拖动。现在,我希望能够检索该矩形(区域)内的所有小部件。
我知道 findChild() 和 findChildren() 函数,它们确实会返回子项。但我真正需要的是一种限制搜索到区域范围内的方法,因为 '画布' 中可能有很多小部件。(由于我所做的事情的性质,可能会有成千上万个小部件分布在非常大的区域内!)
这是我的问题:我最好的选择是什么?是否应该直接使用 findChildren() 并循环遍历列表以手动查找区域内的子项。或者我应该通过 findChild(x, y)循环遍历区域内的所有像素? 或者也许有一个更简单的解决方案,可以加快这个过程?类似于 findChildren(x, y, width, height)?
希望我的问题说得清楚。我尽力了解释一切。谢谢!

你的父部件是哪个?请发布一个可管理的版本的您的实际代码。 - user1006989
这只是我制作的一个自定义小部件,它扩展了QWidget并进行了自己的绘制。它捕获了一些鼠标事件来做一些花哨的东西。没有太复杂的内容。当我初始化一个子项时,我将父项作为参数给出,然后指定它们在绝对坐标中的位置。我会尝试整理一份可管理的代码版本,并在完成后更新我的帖子。 - Apos
成千上万的小部件?那可真是...太多了!根据您所描述的情况,Graphics View Framework 似乎更加适合。 - Avaris
1个回答

3
如果你使用了QGraphicsScene而不是自己编写代码,你可以使用items(..)方法非常高效地在特定区域内查找你的子项。这只在QGraphicsScene中可行,因为它使用BSP空间加速结构,所以如果你不能在合理的时间内迁移到QGraphicsScene,你将不得不自己编写代码。这并不像听起来那么难,我已经编写了许多边界体层次结构,它们非常简单。

哇!看起来这正是我正在寻找的东西!我将尝试一下,然后将您的回复标记为已解决。谢谢! - Apos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接