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

时间:2016-10-06 07:32:39

标签: qml qabstractitemmodel qabstractlistmodel

在我的项目中,我需要使用QML List视图显示一些数据列表。而我使用的QT版本是QT 5.0.2。由于此版本的Qt无法使用滚动条视图,因此我设法按照此example实现了它。

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

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

  1. 我创建了一个继承自QAbstractListModel的C ++类,我已经覆盖了rowCount,data,canfetchmore和fetch更多函数。
  2. 在QML中,我将实例C ++称为模型。
  3. 每当调用fetchmore()函数时,我都会使用其他组件提供的C ++ API并将其附加到我的列表模型来请求下一组数据。
  4. 到目前为止,这很好。但我需要一些澄清 -

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

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

1 个答案:

答案 0 :(得分:0)

我已设法以更好的方式处理它。请检查this post以获取答案。