我正试图在连接到QTreeView
的自定义模型上启用drop。
我做了以下工作:
- 确保在
QTreeView
上启用acceptDrops - 在我的自定义模型
supportedDropActions
到return Qt::CopyAction | Qt::MoveAction
上实现 - 在我的自定义模型
mimeType
s上实现,以返回带有text/uri列表的QStringList
- 在我的自定义模型
dropMimeData
上实现,以便在发生跌落时进行处理
这就是我在QTreeWidget
上工作所需要的全部内容。
我已经转到:
- 已实现
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled;
的标志
然而,当我运行我的应用程序,并试图将Windows中的一个文件拖到我的QTreeView
上时,我只得到了一个不允许的Ghostbusters风格的圆圈,上面有一个斜线。
我还需要做什么才能启用drop?
我终于自己解决了这个问题。
事实证明,问题是在flags函数中,在索引无效的情况下,我未能返回ItemIsDropEnabled标志。无效索引是根节点的信号,即视图中没有项目的区域,因此空格是不可丢弃的。
这很难检测到,因为我一直在尝试使用drop向树中添加项目,所以没有一个项目不使用drop,这意味着我看到的只是一个带斜线的圆圈。
对于那些面临类似问题的人,我想指出的是,有必要在支持的丢弃操作中返回Qt::CopyAction
。单独使用Qt::MoveAction
是行不通的。