Qt需要为自定义模型做些什么来启用drop?

时间:2011-09-08 22:59:31

标签: qt model-view-controller model qtreeview

我正在尝试启用我已连接到QTreeView的自定义模型。

我做了以下事情:

  • 确保QTreeView
  • 启用了acceptDrops
  • 在我的自定义模型supportedDropActions上实施为return Qt::CopyAction | Qt::MoveAction
  • 在我的自定义模型mimeType上实施,以使用text / uri-list返回QStringList
  • 在我的自定义模型dropMimeData上实现,以便在发生丢弃时处理丢弃。

这就是我需要的所有工作QTreeWidget

我继续:

  • 实施了return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled;
  • 的标志

然而,当我运行我的应用程序并尝试将Windows中的文件拖到我的QTreeView上时,我只是得到了不允许使用带有斜线的Ghostbusters样式的圆圈。

启用丢弃还需要做什么?

2 个答案:

答案 0 :(得分:2)

最后我自己想出了这个。

原来问题是在flags函数中,在无效索引的情况下,我无法返回ItemIsDropEnabled标志。无效索引是根节点的信号,即没有项目的视图区域,因此空白空间不可删除。

这很难被发现,因为我一直在尝试使用drop来添加项目到我的树上,所以没有没有掉线工作,这意味着我所看到的只是带有斜线的圆圈。

答案 1 :(得分:0)

对于那些面临类似问题的人,我想指出有必要在支持的删除操作中返回Qt::CopyAction。仅Qt::MoveAction不起作用。