我正在尝试在挂接到QTreeView的自定义模型上启用放置。

我已经完成以下工作:


确保在QTreeView上启用了acceptDrops
在我的自定义模型supportedDropActionsreturn Qt::CopyAction | Qt::MoveAction上实现
在我的自定义模型mimeType上实现,以返回带有文本/ uri-list的QStringList
在我的自定义模型dropMimeData上实现,以处理丢弃(如果发生)。


这就是我需要在QTreeWidget上运行它的全部。

我继续:


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


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

我还需要做些什么来启用丢弃功能?

最佳答案

终于我自己弄明白了。

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

很难检测到这一点,因为我一直在尝试使用drop将项目添加到我的树中,因此没有任何东西可以不进行drop工作,这意味着我看到的只是带有斜线的圆圈。

09-06 08:42