gpt4 book ai didi

qt - 使用 QObject 代替容器

转载 作者:行者123 更新时间:2023-12-02 15:31:35 25 4
gpt4 key购买 nike

在阅读了 QObject 有趣的父子系统之后,我想知道 Qt 开发人员使用它来代替更传统的容器有多常见。假设内存连续性不是必需的,这似乎提供了一些有趣的功能。

例如,您可以有一个 QObject 并为其提供不同类型的子级,然后根据其类型轻松找到所有子级,从而为 QObject 提供动态异构容器式功能,而不是传统容器所需的同质集合。

并且QObject自然地管理其子级的内存,这也很方便。

这是此功能的常见用途吗?

最佳答案

QObject::findChildren可能比将对象存储在 QList 等普通容器中慢得多,因为:

  1. 每次都会迭代所有子项。它甚至可以递归搜索(但这可以禁用)。
  2. 它执行运行时类型检查。
  3. 它每次都会构造新的 QList。如果结果中有很多对象,这可能会很慢且昂贵。

如果你只使用QList<Type*> my_objects,以上所有都是不必要的。同样在这种情况下:

  1. 您可以为您的收藏命名。 QList<QPushButton*> panic_buttonsfindChildren<QPushButton*>() 更清晰.
  2. 您可以拥有多个相同类型的对象集合。

如果你想制作异构容器,可以使用 QHash<any_type_identifier, QObject*> 。会更快。

也许,findChildren 方法有时可能更简单。但如果你有很多对象或复杂的类,你最好使用普通容器。您仍然可以毫无问题地使用 QObject 的内存管理。

关于qt - 使用 QObject 代替容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19215541/

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