我有一个包含许多项目的自定义树模型。它在顶层以下的第一级有超过1000000项。当我在QTreeView
中展开此级别时,即使项目不可见,也会为每个项目调用model.hasChildren()
(您需要向下,向下,向下滚动...以使其可见) 。问题是我的函数hasChildren()
需要一些时间,特别是在被调用了几百万次(大约需要10秒 - 在PySide / PyQt中)。我的问题是:
1)我知道hasChildren()
被称为可见项,因为它必须知道该项是否应该是可扩展的(如果它有子项)。但为什么它被称为隐形物品(我的意思是那些不在可见范围内并且只有在向下滚动后才可见)?在我看来,只有当项目即将变得可见时才应该调用它。我错过了一些吗?
2)如何解决这个问题?
答案 0 :(得分:0)
您可能需要按pyqt docs覆盖fetchMore / canFetchMore。基本上当你展开根时,会调用fetchMore(),你只会返回一个数据项的子集;当用户滚动时,视图将询问root是否可以获取更多内容;如果它回答是,则会调用fetchMore()并且您的模型可以返回更多项目。这应该导致仅在提取的树项上调用hasChildren()。