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

  • Item_A -> Item_B -> ItemC
  • Item_B -> Item_C
  • ItemC

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

    谢谢。

    PS:编程语言是C++,GUI库是QT3。

    最佳答案

    很久以前,我使用Windows TreeView通用控件做了类似的事情。

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

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

    我想您可以在此处应用相同的策略。

    08-16 03:22
    查看更多