gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:31:40 24 4
gpt4 key购买 nike

我有两个类(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com