使用QObject而不是容器

joh*_*ers 4 qt

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

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

QObject自然地管理其孩子的记忆,这也很方便.

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

Pav*_*hov 5

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

  1. 它每次都会遍历所有孩子.它甚至可以递归搜索(但可以禁用).
  2. 它执行运行时类型检查.
  3. 它每次构造新的QList.这可能是缓慢而昂贵的,因为结果中有许多对象.

以上所有内容如果您只是使用它就没有必要QList<Type*> my_objects.在这种情况下:

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

如果你想制作一个异类容器,你可以使用QHash<any_type_identifier, QObject*>.它会更快.

也许,findChildren方法有时可能更简单.但是如果你有很多对象或复杂的类,你最好使用普通的容器.您仍然可以使用QObject的内存管理而不会出现任何问题.