在 QTreeView 中异步加载数据

Loading data in QTreeView async

我有一个非常大的树结构,我无法在客户端将完整的树加载到 Ram 中。我正在使用 Qt 的 QTreeView。

我想在用户展开元素时动态加载项目的子元素。

是否有一些信号会在用户打开树中的项目时触发?

我正在使用教程 Simple Tree Model Example。当我对模型进行更改时,视图也必须更新。而且我不想失去焦点以避免用户混淆!

一段时间后(请求服务器)...

您需要实现 QAbstractItemModel 的子类来处理所需的数据量。当一个项目在视图中展开时,它会调用 QAbstractItemModel::rowCount 来确定子项计数,然后调用 QAbstractItemModel::flagsQAbstractItemModel::data 来获取子项数据。如果请求的数据目前不可用,您应该 return 占位符数据(即 1 行包含 "Loading"),然后开始请求。收到数据后,发出 rowsAboutToBeInsertedrowsInserted 信号以通知视图有关新数据的信息(您还应该通知它有关删除 "Loading" 行)。然后视图将再次调用 rowCountdataflags 方法,您的模型现在应该提供加载的数据。使用 QCache 将最后访问的数据保存在内存中。