Большой набор данных в представлении списка QML/модели списка C++

В моем проекте мне нужно отобразить список некоторых данных, используя представление списка QML. И версия QT, которую я использую, — это QT 5.0.2. Поскольку представление полосы прокрутки недоступно в этой версии Qt, мне удалось реализовать его, следуя этому пример.

Теперь источником данных является другой компонент, который предоставляет API-интерфейсы C++ для запроса диапазона данных. А количество элементов в наборе данных может быть огромным (десятки тысяч).

Я выполнил следующие шаги для достижения моих требований:

  1. Я создал класс C++, который наследуется от QAbstractListModel, и я переопределил функции rowCount, data, canfetchmore и fetchmore.
  2. А в QML я назвал экземпляр C++ моделью.
  3. Всякий раз, когда вызывается функция fetchmore(), я запрашиваю следующий набор данных, используя API-интерфейсы C++, которые предоставляются другим компонентом, и добавляю их к моей модели списка.

Пока все хорошо. Но мне нужно несколько уточнений -

  1. Если я буду продолжать добавлять данные в свою модель списка, то в конечном итоге я буду хранить в списке тысячи элементов (я не хочу этого делать). Я хочу ограничить количество элементов в списке и использовать его как кольцевой буфер. Это возможно?
  2. Параметр QModelIndex в fetchmore получен как недопустимый индекс. Почему?
  3. Предположим случай: алфавиты упоминаются на полосе прокрутки, и когда пользователь выбирает Y на полосе прокрутки, я должен получить элементы, начинающиеся с Y. Здесь я могу получить данные из моего внешнего компонента и сбросить модель списка с новыми данными. Но если я это сделаю, то мой список будет начинаться с Y-элементов, и я не смогу прокрутить вверх, чтобы получить предыдущие элементы. -- Есть ли другой способ добиться этого?
  4. Кроме того, мой другой компонент занимает значительное время, если я запрашиваю огромный набор данных (например, в случаях, упомянутых в пункте 3). Есть ли какие-либо предложения по улучшению дизайна для обработки этого случая?
  5. Есть ли способ, кроме fetchmore(), для динамического обновления модели.

Я провел много времени в Google, чтобы получить ответы на свои вопросы, и я успешно НЕ ПРОШЕЛ. :(

Любая помощь приветствуется. Заранее спасибо.


person user6930414    schedule 06.10.2016    source источник