c++ - 如何使用 QList 跟踪子类的实例

标签 c++ qt qlist

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

家长

------------ child 1

------------ child (1)

------------ child (2)

我将如何使用 QList跟踪创建的子对象的数量?我想用名称附加索引号,以便 Child (1)看起来像 Child 1 , 它现在看起来像一个拷贝。

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

编辑:

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

有什么建议吗?

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

最佳答案

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

要访问子列表,请使用 QObject::children() .要仅获取特定类型的 child ,请使用 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 .

如果您确定只有特定类型的对象是子对象,您可以使用 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.

大概你的意思是插槽?

关于c++ - 如何使用 QList 跟踪子类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44046053/

相关文章:

c++ - 如何求和序列?

c++ - 在 Symbian S60 上读取 SIM 联系人

python - 如何获取 Qt 小部件类型

qt - PyQt4 QtGui.QSound 作为命令行程序播放?

python - 我可以像在 PythonQt 中那样在 PyQt 中利用 Qt 元对象系统吗?

c++ - 从另一个列表 C++ Qt 中的对象的属性创建一个新的值列表

c++ - 如何将 std::string_view 转换为 QStringView

c++ - 序列点和评估顺序(预增量)

c++ - 如何返回 QList<specicObject*> 指针并且不会发生内存泄漏?

c++ - 将指向类的指针 append 到 QList QList<Class* >