gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:09:10 29 4
gpt4 key购买 nike

我有很多(分层的)数据显示在 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/

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