QML 列表视图/C++ 列表模型中的大量数据

use*_*414 6 qabstractitemmodel qml qabstractlistmodel

在我的项目中,我需要使用 QML 列表视图来显示一些数据的列表。而且,我使用的 QT 版本是 QT 5.0.2。由于在这个版本的 Qt 中没有滚动条视图,我设法按照这个例子来实现它。

现在,数据源是另一个组件,它提供了 C++ API 来请求数据范围。并且数据集中的元素数量可能很大(以数万计)。

我已按照以下步骤实现我的要求:

  1. 我创建了一个继承自 QAbstractListModel 的 C++ 类,并且覆盖了 rowCount、data、canfetchmore 和 fetch more 函数。
  2. 在 QML 中,我将 C++ 实例称为模型。
  3. 每当调用 fetchmore() 函数时,我都会使用由另一个组件提供的 C++ API 请求下一组数据,并将相同的数据附加到我的列表模型中。

到目前为止,还不错。但我需要澄清几点——

  1. 如果我继续将数据附加到我的列表模型,那么我最终会在列表中存储数千个元素(我不想这样做)。我想限制列表中的元素数量并将其用作环形缓冲区。这可能吗?
  2. fetchmore 中的 QModelIndex 参数作为无效索引接收。为什么?
  3. 假设一个案例:滚动条上提到了字母,当用户在滚动条上选择 Y 时,我应该获取以 Y 开头的元素。在这里,我可以从我的外部组件获取数据并使用新数据重置列表模型。但是,如果我这样做,那么我的列表将从 Y 元素开始,我将无法向上滚动以获取以前的元素。-- 还有其他方法可以实现吗?
  4. 此外,如果我询问大量数据(例如在第 3 点中提到的情况),我的其他组件需要相当长的时间 - 有什么建议可以做出更好的设计来处理这种情况吗?
  5. 除了 fetchmore() 之外,还有什么方法可以动态更新模型。

我在谷歌上花了很多时间来回答我的问题,但我成功地失败了。:(

任何帮助表示赞赏。提前致谢。