我有一个非常大的树结构,我无法在客户端将完整的树加载到 Ram 中。我正在使用 Qt 的 QTreeView。
我想在用户展开元素时动态加载项目的子元素。
是否有一些信号会在用户打开树中的项目时触发?
我正在使用教程 Simple Tree Model Example .当我对模型进行更改时, View 也必须更新。而且我不想为了避免用户混淆而失去焦点!
一段时间后(请求服务器)...
最佳答案
您需要实现一个 QAbstractItemModel
的子类,它可以处理所需的数据量。当一个项目在 View 中展开时,它调用 QAbstractItemModel::rowCount
来确定子项计数,然后调用 QAbstractItemModel::flags
和 QAbstractItemModel::data
获取 child 数据。如果此时请求的数据不可用,您应该返回占位符数据(即包含“正在加载”的 1 行),然后开始请求。收到数据后,发出 rowsAboutToBeInserted
和 rowsInserted
信号以通知 View 有关新数据(您还应该通知它有关删除“正在加载”行)。然后 View 将再次调用 rowCount
、data
和 flags
方法,您的模型现在应该提供加载的数据。使用 QCache
将最后访问的数据保存在内存中。
关于c++ - 在 QTreeView 中异步加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31893254/