Допустим, мы имеем следующую иерархию:своп QTreeView элементы на операцию перетаскивания
+ A
|-- B
|-- D
|-- C
И скажем, пользователь перетаскивает C на В. Можно ли иметь оба узла (включая детей) поменялись местами, как результат этой операции перетаскивания?
+ A
|-- C
|-- B
|-- D
Я пробовал несколько подходов: от не подклассов модели элемента (dropMimeData
, insertRows
и т.д.) в режимах настройки с setDragDropOverwriteMode
и DragDropMode::InternalMove
, чтобы подклассы dropEvent(QDropEvent * e)
и ничего работали до сих пор.
я столкнулся следующие Techincal ограничения:
QStandardItemModel::dropMimeData
иQTreeview::dropEvent
не даст вам знать, индекс источника, они вперед мим данных, и нет никакого способа, чтобы получить QModelIndex Источника, чтобы выполнить обменивать.Подход
DragDropMode::InternalMove
иsetDragDropOverwriteMode
не работает должным образом, исходный узел каким-то образом добавляется к целевому узлу-перехватчику, а исходный узел удален. Если вы установилиDragDropMode::Copy
, исходный узел будет сохранен, но целевой узел также не будет перезаписан.
Подсказка в правильном направлении будет оценена по достоинству.
Это работает! Хотя он не отвечает на вопрос о том, как выполнять фактическую свопинг. Я пытаюсь использовать QStandardItemModel :: takeItem и такие, но 'QModelIndex's повреждаются при попытке выполнить обмен. Не говоря уже о том, как бороться с дочерними узлами. – voodooattack
этот часть простой посмотрите обновление. –
Это для Qt5. – voodooattack