QTableView InternalMove перетаскивание с использованием пользовательской модели - PullRequest
0 голосов
/ 15 февраля 2019

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

  • columnCount
  • rowCount
  • data
  • flags
  • moveRows
  • supportedDropActions
  • supportedDragActions

QTableView Настройки:

  • setDragEnabled(true)
  • setDragDropOverwriteMode(false)
  • setDragDropMode(QAbstractItemView::InternalMove)
  • setDefaultDropAction(Qt::MoveAction)
  • setSelectionMode(QAbstractItemView::ExtendedSelection)
  • setSelectionBehavior(QAbstractItemView::SelectRows)

Я хочу иметь возможность изменять порядок строк как в QTableView, так и в базовой модели с помощью перетаскивания.Более того, эти шаги не должны удалять и вставлять в модель, потому что базовые данные не должны быть удалены вообще, только переупорядочены.Вместо этого при выпадении события QTableView вызывает removeRows для модели и ничего более.moveRows никогда не вызывал и даже insertRows (хотя я не хочу, чтобы он был удален и вставлен, я хочу, чтобы он был перемещен ).
Я думал, что QTableView следует просто вызвать moveRows для базовой модели, но по некоторым причинам он вызывает removeRows, несмотря на то, что для dragDropMode установлено значение InternalMove и defaultDropAction для MoveAction.Это выглядит странно на мой взгляд.

Как я могу (если вообще) заставить QTableView просто переместить желаемую строку в модели?И почему он вызывает removeRows, если удаление не требуется?Какие вызовы базовой модели выполняются QTableView, когда перетаскивание происходит в режиме InternalMove, и как я могу правильно изменить это поведение?Должен ли я подкласс QTableView?Если да, то какие функции-члены мне следует повторно реализовать?

Относительно MIME-типов: мне не нужно перетаскивать эти данные за пределы виджета, только внутреннее переупорядочение.Поэтому я думаю, что мне также не нужны MIME-типы.

...