c++ - TreeView 中的分层数据和 TreeView 更新技术

标签 c++ qt treeview design-patterns qt3

我有很多(分层的)数据显示在 TreeView 中(可能是大约 20K 项或更多,包括子项)。我的数据的特殊问题是 TreeView 中显示的每个对象都可以存在于许多 TreeView 项目中。我的意思是我可能有这样的层次结构:

  1. Item_A -> Item_B -> ItemC
  2. Item_B -> Item_C
  3. ItemC

假设 Item_A 包含 Item_B,而 Item_B 又包含 Item_C,如上所示。这意味着我的列表还将显示 Item_BItem_C 的层次结构。现在考虑显示为 Item_B 的对象发生了某些事情(例如名称更改)。那么当然这两个项目 必须更新。现在考虑具有复杂层次结构的 TreeView 中的数千个项目。您将使用什么策略来更新 TreeView ?速度当然是这里的主要关注点,但也易于使用和维护。目前我持有列表项到对象的内部映射,反之亦然,以快速查找和更新项目。这是一个正确的策略吗?通过在每次更新后重新创建列表,我可以丢掉很多代码,但我不知道哪些项目路径被展开或折叠了。我该如何解决这个问题?我应该将扩展路径存储在内部容器中吗?

谢谢。

PS:编程语言为C++,GUI lib为QT3。

最佳答案

我很久以前做过类似的事情,使用的是 windows TreeView 公共(public)控件。

我所做的是设置 CUSTOMDRAW 标志,为每个可能的不同节点保留一个实例,并使每个节点都指向该实例:3 个 Item_C 节点每个都有一个指向同一个唯一 Item_C 实例的指针。

因此,当我更改 Item_C 上的数据时,我只需要在 3 个 Item_C 节点上调用 InvalidateRect() 以反射(reflect)对(单个)已更改数据所做的更改。

我想你可以在这里应用相同的策略。

关于c++ - TreeView 中的分层数据和 TreeView 更新技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1217403/

相关文章:

qt - QObject 在放入 QML 变量后被销毁

c# - 如何获得拖放目标对象?

来自数据库数组的 PHP TreeView

c++ - 如何检查用户输入是否超过一个字母并在 C++ 中正确显示

python - 如何检查 GUI 应用程序是否在 Ubuntu 上运行?

c++ - MSVC:具有模板化转换运算符和多重继承的错误

qt - 如何强制 Qt Creator 使用 MinGW 而不是 Visual Studio

java - 如何在 JFace TreeViewer 中显示根元素?

c++ - 为什么 valgrind 显示泄漏,即使包含动态分配对象的 vector 已被释放?

c++ - 模板使用另一个模板