Перетащите из QTreeView в QListView с копией файла в Qt5

Я пытаюсь перетащить из Treeview (каталог шаблонов) в Listview (каталог проекта). Я читал, что лучшим решением является реализация mimeData() и dropMimeData() из модели. Пока не знаю, что прописать внутри функций и мой тест работает только на перетаскивание.

Я установил их следующим образом:

В виде дерева :

  • model = QFileSystemModel (путь к шаблонам)
  • перетаскивание = истина
  • режим перетаскивания = только перетаскивание
  • defaultDropAction = действие копирования

Посмотреть список :

  • model = QFileSystemModel (путь к проекту) с ReadOnly=false
  • dragDropMode = DropOnly
  • sefaultDropAction = действие копирования

person sev75    schedule 21.04.2015    source источник
comment
Вы установили для параметра acceptDrops значение true?   -  person Maxito    schedule 21.04.2015
comment
Да, я пробовал, но предмет все равно не хочет падать.   -  person sev75    schedule 21.04.2015


Ответы (2)


Если перетаскивание уже работает, для отбрасывания следует заново реализовать функции обработчика событий dragEnterEvent() и dropEvent() принимающего QWidget.

Я делал что-то подобное раньше.

void SomeClass::dragEnterEvent(QDragEnterEvent *e)
{
    e->acceptProposedAction();
}

void SomeClass::dropEvent(QDropEvent *e)
{
    //read mimeData() from QDropEvent
}

В документации есть довольно наглядный пример: http://doc.qt.io/qt-5/dnd.html

ПД. Как я упоминал ранее в комментариях, не забудьте установить для параметра acceptDrops значение true.

person Maxito    schedule 21.04.2015

Нет необходимости переопределять события:

setAcceptDrops(true) достаточно, чтобы сделать Drag and drop, и копирование файла будет сделано автоматически.

Мой первый тест не сработал, но после чистой перекомпиляции все стало лучше. Спасибо за помощь

person sev75    schedule 23.04.2015