Почему QAbstractItemView удаляет элементы после перетаскивания MoveAction?

Я заметил в исходном коде QAbstractItemView что метод void startDrag(Qt::DropActions supportedActions) называет некоторые clearOrRemove() личное после перетаскивания, чей тип MoveAction(), который удаляет выбранные элементы.

Дело в том, что когда действие удаления произошло в том же виде, мои модели реализуют действие, используя moveRows(), поэтому строки перемещаются, а затем clearOrRemove() удаляет их, как будто они были исходными строками.

Как я могу предотвратить это последнее удаление? Я пропустил идиоматический способ реализации модели "только для перемещения" (имеется в виду, что элементы можно перемещать, но не добавлять / удалять)?

0 ответов

Я столкнулся с той же проблемой и нашел обходной путь:

Очень вероятно, что вы переопределили QAbstractItemModel::dropMimeData-метод вашей модели. Этот метод должен возвращатьtrueесли добавленные данные mime обрабатывались этим методом, иначе false. Хитрость в том, чтобы вернутьсяfalse если action был MoveAction, даже если данные обрабатывались правильно (реализуйте обработку внутри этого метода). Представление считает, что перетаскивание не было успешным, и, следовательно, не удаляет перетаскиваемые элементы.

Возможно, взлом возвращаемого значения дает некоторые проблемы в более сложных настройках, но в моем простом случае это работает.

Другие вопросы по тегам