Почему QAbstractItemView удаляет элементы после перетаскивания MoveAction?
Я заметил в исходном коде QAbstractItemView
что метод void startDrag(Qt::DropActions supportedActions)
называет некоторые clearOrRemove()
личное после перетаскивания, чей тип MoveAction()
, который удаляет выбранные элементы.
Дело в том, что когда действие удаления произошло в том же виде, мои модели реализуют действие, используя moveRows()
, поэтому строки перемещаются, а затем clearOrRemove()
удаляет их, как будто они были исходными строками.
Как я могу предотвратить это последнее удаление? Я пропустил идиоматический способ реализации модели "только для перемещения" (имеется в виду, что элементы можно перемещать, но не добавлять / удалять)?
0 ответов
Я столкнулся с той же проблемой и нашел обходной путь:
Очень вероятно, что вы переопределили QAbstractItemModel::dropMimeData
-метод вашей модели. Этот метод должен возвращатьtrue
если добавленные данные mime обрабатывались этим методом, иначе false. Хитрость в том, чтобы вернутьсяfalse
если action
был MoveAction
, даже если данные обрабатывались правильно (реализуйте обработку внутри этого метода). Представление считает, что перетаскивание не было успешным, и, следовательно, не удаляет перетаскиваемые элементы.
Возможно, взлом возвращаемого значения дает некоторые проблемы в более сложных настройках, но в моем простом случае это работает.