使用 QObject 代替容器

2023-12-21

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

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

And 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 的内存管理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 QObject 代替容器 的相关文章

随机推荐

  • MySQL“设置 unique_checks”、“设置foreign_key_checks”与“更改表禁用键”

    我们遇到一个问题 mysqldump 脚本花费了 90 的时间来填充它处理的一小部分表 消除 FK 和索引可以消除速度问题 但不是可接受的解决方案 转储脚本does have 40014 SET OLD UNIQUE CHECKS UNIQ
  • WH_MOUSE 的 SetWindowsHookEx

    我手中有一些代码可以全局打印鼠标的坐标 使用 WH MOUSE LL 我的目标是使用 WH MOUSE 而不是 WH MOUSE LL 因为 根据我的阅读 它更快 我在论坛上读到 当使用 WH MOUSE 时 需要在 DLL 中声明它才能实
  • Script Src 标签内有脚本吗? <脚本>(JavaScript 等)

    为什么这不起作用 但这呢 这在许多从源代码中提取的 HTML 标签中都很常见 微观优化 https stackoverflow com questions 3470990 is micro optimization w
  • 如何在Android中正确编写和使用View子类?

    我正在尝试实施找到的解决方案之一here https stackoverflow com questions 4065134 is there a listener for when the webview displays its con
  • Objective-C 中驼峰命名法转下划线并返回

    我正在寻找一种简单 有效的方法来将 CamelCase 中的字符串转换为下划线表示法 即 MyClassName gt my class name 然后在 Objective C 中再次转换回来 我当前的解决方案涉及很多rangeOfStr
  • PHPStorm 上预期的、意外的文件结束

    我正在使用 PHPStorm 并出现一些有趣的错误 警告 不确定我是否跳过了配置某些内容 例如 这是一个查询 query INSERT INTO tblperson query personName personLname personNu
  • ffmpeg 过滤时出错:无法分配内存

    我的工作站似乎有足够的内存 和所有东西 当我尝试按如下方式运行 ffmpeg 时 usr local bin ffmpeg loglevel debug i A066C002 170619NU CANON mov filter comple
  • 有没有办法可以使用 Cypress 从节点提取数据?

    我正在尝试找到一种方法可以将这些信息提取到我的测试中或在某个地方打印出来 在当前的格式中 它仅表示您有 3 个辅助功能问题 它的描述性不是很强 所以我想以某种方式提取下面的图像 正如您在节点中看到的那样 它为我提供了要修复的确切元素 那么如
  • Bootstrap 水平形式“control-label”不使用响应式样式

    我正在使用 Bootstrap 2 的 form horizo ntal 类 但我的标签似乎没有利用响应式样式 它看起来是这样的 当我检查它时 它的标签上特别有 width 160px 这是常规的 Bootstrap 设置 但响应式样式只有
  • 如何从外部 React 组件获取 Auth0 令牌?

    我正在使用 axios 向我的 API 发出请求 目前 我使用 axios 拦截器为发送的每个请求设置令牌 因此我不必重复从组件内获取令牌 有什么办法可以做到这一点吗 我的第一次尝试看起来像这样 axios ts import useAut
  • 通过 Chef 部署时出现 git 错误

    我正在尝试通过 Chef 代码部署 Rails 应用程序 食谱包含代码 deploy revision testapp do repo REPO URL ssh wrapper home ubuntu ssh chef ssh deploy
  • 我们可以在 Matlab 中拥有混合型矩阵吗?如何实现?

    我正在尝试编写一个以矩阵 特别是矩阵 作为输出的函数 其行显示双精度型变量和二进制 状态 没有真正的原因 只是出于好奇 我想知道是否有办法让行具有不同的类型 非常感谢 MATLAB 提供了两种存储混合数据类型的可行选项 单元阵列 你可以看一
  • Rails 4 删除了测试生成器(尤其是 test_unit)

    我如何删除 test unit 生成器以使它们从rails generate list 我已经尝试过一些方法不适合我 config generators do g g test framework nil end 创建应用程序 T opti
  • 使用折叠表达式检查可变参数模板参数是否唯一

    给定一个可变参数模板参数包 我想使用以下方法检查赋予它的所有类型是否都是唯一的inline constexpr bool and 折叠表达式 http en cppreference com w cpp language fold 我尝试过
  • 如何使用正则表达式匹配重音字符?

    我正在运行 Ruby on Rails 3 0 10 和 Ruby 1 9 2 我使用以下正则表达式来匹配名称 NAME REGEX w s u validates name presence gt true format gt with
  • C++11 的编译器标志

    我正在尝试编写 CMakeFiles txt 以前从未这样做过 但我不确定 C 11 使用什么编译器标志 我使用 GCC 4 8 2 标志是 std c 0x 但我不知道如何处理其他编译器 我不认为他们都使用该标志 我相信 MinGW TD
  • ActiveRecord Association 选择包含记录的计数

    Example class User has many tickets end 我想创建包含用户计数票证逻辑的关联 并在包含中使用它 用户 has one Ticket count Users includes tickets count
  • 选择 UITableViewCell AccessoryView,与选择行分开

    我有一个UITableview我正在显示一些任务 并且每一行都有一个复选框来标记任务是否完成 我希望在用户点击复选框时切换复选标记 并在用户点击该行时切换到详细视图 后者很简单 只需使用 void tableView UITableView
  • 如何让 Javascript 等待所有图像加载后再继续?

    我对 Javascript 相当陌生 目前正在尝试以各种尺寸和位置显示图像 这意味着我必须先加载图像 然后才能访问宽度和高度等值 现在 这就是我面临问题的地方 我尝试依次加载图像 确保只有在完成一张图像后才会加载另一张图像 const a
  • 使用 QObject 代替容器

    读完有趣的亲子系统后QObject我想知道 Qt 开发人员使用它来代替更传统的容器有多常见 假设内存连续性不是必需的 这似乎提供了一些有趣的功能 例如 您可以有一个QObject并为其提供不同类型的子级 然后根据其类型轻松找到所有子级 从而