使用Qt5中的文件副本从QTreeView拖放到QListView

时间:2015-04-21 13:14:35

标签: qt drag-and-drop qt5.4

我尝试从Treeview(模板目录)拖放到Listview(项目目录)。我读到最好的解决方案是从Model实现mimeData()和dropMimeData()。现在,我不知道在函数中放什么,我的测试只适用于拖动。

我将它们设置为:

Treeview:

  • model = QFileSystemModel(模板路径)
  • dragEnable = true
  • dragDropMode = dragOnly
  • defaultDropAction = copyAction

Listview:

  • model = QFileSystemModel(项目路径),ReadOnly = false
  • dragDropMode = dropOnly
  • sefaultDropAction = copyAction

2 个答案:

答案 0 :(得分:0)

如果拖动已经有效,那么为了放弃你应该重新实现接收QWidget的 dragEnterEvent() dropEvent()事件处理函数。

我之前做过类似的事情。

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

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

这里的文档中有一个非常明确的例子:http://doc.qt.io/qt-5/dnd.html

PD。正如我之前在评论中提到的,不要忘记 acceptDrops 设置为true。

答案 1 :(得分:0)

无需重新实现事件:

setAcceptDrops(true)足以进行拖放操作,文件副本会自动生成。

我的第一次测试不起作用,但经过干净的重新编译后情况会好转。 谢谢你的帮助