Как сортировать с beginMoveRows без постоянного повреждения / дублирования индекса?

Я пытаюсь использовать beginMoveRows / endMoveRows, чтобы заставить постоянные индексы придерживаться, но иногда расширенные флаги состояния / постоянные индексы дублируются, где они не должны быть.

Там довольно много кода, поэтому я рассмотрю то, что, как мне кажется, я сказал машине сделать:

Есть метод sortChildrenOf (item), который делает всю магию.

  • Найдите детей из элемента и вызовите sortChildrenOf для каждого ребенка как
    параметр
  • сохранить старый порядок
  • быстрая сортировка детей
  • найти различия в старом и новом порядке
  • для каждого различия:
  • beingMoveRows
  • применить изменение
  • endMoveRows

Все работает отлично, когда есть 2 уровня, но когда я ввожу «длинное» дерево данных, постоянные индексы повреждаются.

Данные в дереве обновляются из сети, но фактическое обновление выполняется в потоке графического интерфейса.

Есть какой-то точный порядок, в котором я должен делать вещи? Могу ли я забыть наследовать какой-то метод, который вызывает это?

Я получил эти методы реализованы:
— данные
— флаги
— getItem
— индекс
— родитель
— setData

Редактировать:
забыл упомянуть, я получил emit layoutAboutToBeChanged и emit layoutChanged до и после основного вызова sortChildrenOf.

1

Решение

Я получил его на работу, но не с beginMoveRows и endMoveRows. Я использовал старую систему генерации layoutAboutToChange, получая список постоянных индексов, манипулируя этим, и возвращая его обратно с помощью changePersistentIndexList и, наконец, изменяя эмиссию макета.

Так как это было исправлением, я склонен полагать, что есть некоторая ошибка с beginMoveRows, endMoveRows и постоянными индексами с данными типа дерева.

Спросите, нужен ли вам лучший пример кода.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]