[英]How to use QList to keep track of instances of child classes
我有两个类, Parent
和Child
(后者是从前者派生的),它们都是QObject派生的类。 这些类被实现为树结构上的节点,从而为每个节点提供特定的功能。 在Parent
类下,有一个信号会在每次触发时创建一个Child
类型的新对象。 因此,在三个触发器之后,树结构将如下所示:
家长
---------儿童1
---------孩子(1)
---------孩子(2)
我将如何使用QList
跟踪创建的子对象的数量? 我想在索引号后面加上名称,以使Child (1)
看起来像Child 1
,现在看起来像一个副本。
我已经阅读了QList
文档,并且了解了将对象放入列表后如何提取有意义的信息,但这是我找不到答案的部分。
编辑:
说我做了QList<Child*>ListID
,这只是将ListID
初始化为一个指向Parent
类型列表的指针,还是会填充该列表?
有什么建议么?
PS:在开始实施之前,我想知道这一点,因为我想知道我是否以错误的方式进行操作。 这就是为什么我没有要显示的代码。 我希望有更多的随意讨论。
裸QObject
本身就是树节点。 是的,一个QObject
是容器QObject
小号! 因此,您不需要做任何特别的事情,因为它保留了其所有直接子代的列表,并且还提供了一种递归获取所有特定类型或名称的子代的方法。
要访问子列表,请使用QObject::children()
。 要仅获取特定类型的子代,请使用QObject::findChildren()
。
在您的情况下,您可以在需要时调用auto list = findChildren<Child*>({}, Qt::FindDirectChildrenOnly)
来获取列表。 如果您不希望动态分配任何内存,请直接使用QObject
的内部列表:
for (auto objChild : std::as_const(children()))
if (auto child = qobject_cast<Child*>(objChild)) {
...
}
在C ++-17之前的版本中,请使用qAsConst
代替std::as_const
。
如果确定只有特定类型的对象是子对象,则可以改用static_cast
并节省一点时间:
for (auto objChild : std::as_const(children())) {
auto child = static_cast<Child*>(objChild);
...
}
在
Parent
类下,有一个信号会在每次触发时创建一个Child
类型的新对象。
想必您是说插槽吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.