c++ - 在 QTreeView 中异步加载数据

标签 c++ qt qtreeview model-view

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

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

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

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

sub elements of tree still loading

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

sub elements of tree finished loading and showing them

最佳答案

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

关于c++ - 在 QTreeView 中异步加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31893254/

相关文章:

c++ - 拖动鼠标时QTreeView selectedIndex问题

python - PyQt : removing QTreeView columns

C++ Mysql Real Escape 字符串问题

c++ - dumping Core 时 Heap snapshot 的时间

linux - QTweetLib 和 request_token

c++ - 如何在 Qt 中进行 MySQL 查询?

python - 如何在 QSplitter 中设置 QTreeView 的初始大小?

c++ - 派生类如何访问基类的私有(private)数据成员?

c++ - 比较整数 vector 的 2 个 vector 的更好(更快)算法?

java - QML Java - 从事件处理程序访问委托(delegate)项