如何使用 QList 跟踪 child 类 的实例

How to use QList to keep track of instances of child classes

我有两个classes,ParentChild(后者派生自前者),它们都是QObject派生的classes。这些 classes 被实现为树结构上的节点,赋予每个节点其特定的功能。在 Parent class 下有一个信号,每当触发时都会创建一个 Child 类型的新 object。因此,在三个触发器之后,树结构将如下所示:

PARENT

----------Child1

----------Child (1)

----------Child (2)

我如何使用 QList 来跟踪创建的 child object 的数量?我想用名称附加索引号,这样 Child (1) 看起来像 Child 1,现在看起来像一个副本。

我已经阅读了 QList 文档,并且我了解如何在 object 出现在列表中后提取有意义的信息,但我无法找到这部分的答案。

编辑:

假设我做了 QList<Child*>ListID,这只是将 ListID 初始化为指向类型 Parent 的列表的指针,还是它也会填充该列表?

有什么建议吗?

PS:我想在开始实施之前知道这一点,因为我想知道我是否以错误的方式进行。这就是为什么我没有要显示的代码。我希望有更多的随意讨论。

一个光秃秃的QObject本身就是一个树节点。 是的,QObjectQObjects 的容器! 所以,您不需要做任何特别的事情,因为它保留了所有直接的列表children,并且还提供了一种递归获取特定类型或名称的所有 children 的方法。

要访问 children 的列表,请使用 QObject::children()。要仅获取特定类型的 children,请使用 QObject::findChildren().

对于您的情况,您可以在需要时调用 auto list = findChildren<Child*>({}, Qt::FindDirectChildrenOnly) 来获取列表。如果你不关心动态分配任何内存,直接使用QObject的内部列表:

for (auto objChild : std::as_const(children()))
  if (auto child = qobject_cast<Child*>(objChild)) {
    ...
  }

Pre C++-17,使用qAsConst代替std::as_const

如果您确定只有 objects 的特定类型是 children,您可以改用 static_cast 并节省一点运行时间:

for (auto objChild : std::as_const(children())) {
  auto child = static_cast<Child*>(objChild);
  ...
}

Under the Parent class there is a signal that creates a new object of type Child whenever triggered.

大概你指的是广告位?