在QTreeView异步中加载数据

时间:2015-08-08 12:42:59

标签: c++ qt qtreeview model-view

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

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

当用户在树中打开项目时是否会触发某些信号?

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

sub elements of tree still loading

并且过了一段时间(请求到服务器)......

sub elements of tree finished loading and showing them

1 个答案:

答案 0 :(得分:1)

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