6

在我的项目中,我需要使用 QML 列表视图显示一些数据的列表。而且,我使用的 QT 版本是 QT 5.0.2。由于此版本的 Qt 中不提供滚动条视图,因此我设法通过遵循此示例来实现它。

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

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

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

到目前为止,一切都很好。但我需要一些澄清 -

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

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

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

4

0 回答 0