在我的项目中,我需要使用 QML 列表视图显示一些数据的列表。而且,我使用的 QT 版本是 QT 5.0.2。由于此版本的 Qt 中不提供滚动条视图,因此我设法通过遵循此示例来实现它。
现在,数据源是另一个组件,它提供了 C++ API 来请求数据范围。并且数据集中的元素数量可能很大(以数万计)。
我已按照以下步骤实现我的要求:
- 我创建了一个从 QAbstractListModel 继承的 C++ 类,并且我已经覆盖了 rowCount、data、canfetchmore 并获取更多函数。
- 在 QML 中,我将实例 C++ 称为模型。
- 每当调用 fetchmore() 函数时,我都会使用由另一个组件提供的 C++ API 请求下一组数据,并将其附加到我的列表模型中。
到目前为止,一切都很好。但我需要一些澄清 -
- 如果我继续将数据附加到我的列表模型中,那么我最终将在列表中存储数千个元素(我不想这样做)。我想限制列表中元素的数量并将其用作环形缓冲区。这可能吗?
- fetchmore 中的 QModelIndex 参数作为无效索引接收。为什么?
- 假设一个案例:滚动条上提到了字母,当用户在滚动条上选择 Y 时,我应该获取以 Y 开头的元素。在这里,我可以从外部组件中获取数据并使用新数据重置列表模型。但是,如果我这样做,那么我的列表将从 Y 元素开始,我将无法向上滚动以获取以前的元素。——有没有其他方法可以实现这一点?
- 此外,如果我询问大量数据(例如在第 3 点中提到的情况),我的其他组件需要相当长的时间 - 有什么建议可以做出更好的设计来处理这种情况吗?
- 除了 fetchmore() 之外,还有什么方法可以动态更新模型。
我在谷歌上花了很多时间来回答我的问题,但我成功地失败了。:(
任何帮助表示赞赏。提前致谢。