我有很多(分层的)数据显示在 TreeView 中(可能是大约 20K 项或更多,包括子项)。我的数据的特殊问题是 TreeView 中显示的每个对象都可以存在于许多 TreeView 项目中。我的意思是我可能有这样的层次结构:
Item_A -> Item_B -> ItemC
Item_B -> Item_C
ItemC
假设 Item_A
包含 Item_B
,而 Item_B
又包含 Item_C
,如上所示。这意味着我的列表还将显示 Item_B
和 Item_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/