Отслеживание движения строк в QTableView от модели - PullRequest
0 голосов
/ 04 апреля 2020

TLDR: Как сообщить модели порядок порядка строк (и что он изменился)?

Итак, у меня есть модель, которая наследует форму QAbstractTableModel, и я представляю ее с использованием подкласса QTableView, где я устанавливаю вертикальный заголовок, чтобы он был подвижным, чтобы я мог перетаскивать строки мышью, захватывая сторону таблицы. Это прекрасно работает, но я хочу, чтобы моя модель знала, в каком порядке находятся строки.

Я нашел сигнал sectionMoved, но он испускается только один раз, то есть когда я переместил строки от 0 до 1, Я только узнал, что визуальный индекс строки 0 изменился с 0 на 1; Я не получаю информацию о том, что (логический) визуальный индекс строки 1 изменился с 1 на 0, чтобы приспособиться к первому изменению.

Так как мне передать информацию о порядке отображения элементов в моей модели? Или единственное, что я могу сделать, это перебрать все строки после того, как произошло изменение (в слоте, связанном с сигналом sectionMoved), проверить их визуальный индекс и передать его в модель? Есть ли лучший образец, как такие случаи должны обрабатываться?

Я также пытался переопределить dragEnterEvent и dropEvent и вызывать moveRow при отбрасывании, но механизм сигнала / слота кажется более qt-way и является более тестируемым; также мне не нужно перемещать строки в модели, мне нужен только порядок, чтобы сохранить его для следующего выполнения программы.

Если он измеряет, я использую pyside2 (Qt для python) на основе Qt 5.14 и python 3,8; но я думаю, что мой вопрос больше касается общего подхода Qt.

...