Qt:获取父母区域内的所有孩子

Posted

技术标签:

【中文标题】Qt:获取父母区域内的所有孩子【英文标题】:Qt: get all children within region of the parent 【发布时间】:2012-12-18 01:26:13 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

哪个是您的父窗口小部件?请发布您实际代码的可管理版本 这只是我制作的一个自定义小部件,它扩展了 QWidget 并进行了自己的绘图。它捕获了几个鼠标事件来做一些花哨的事情。没什么太复杂的。当我启动一个孩子时,我将父母作为参数,然后我在绝对坐标中指定它们的位置。我会尝试将我的代码的可管理版本放在一起,完成后我会更新我的帖子。 成千上万的小部件?那是……很多!根据您的描述,Graphics View Framework 听起来更合适。 【参考方案1】:

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

这只能在QGraphicsScene 中实现,因为它使用了BSP 空间加速结构,所以如果您不能在合理的时间内迁移到QGraphicsScene - 您将不得不自己编写。这并不像听起来那么难,我已经编写了许多 bounding volume hierarchy 结构,而且它们非常简单。

【讨论】:

哇!看起来这正是我想要的!我要试一试,然后我会将您的回复标记为已解决。谢谢!

以上是关于Qt:获取父母区域内的所有孩子的主要内容,如果未能解决你的问题,请参考以下文章

获取父母的所有可能的孩子/后代

Mysql如何获取给定ID的父母和所有孩子? [复制]

Swift - CoreData NSPredicate - 获取父母的孩子

使用cheerio在没有孩子的父母中获取文本

Diesel 获取单亲和许多孩子 - 火箭

SQL Recursive:获取孩子的父值