问一个自定义模型需要做些什么才能启用drop



我正试图在连接到QTreeView的自定义模型上启用drop。

我做了以下工作:

  • 确保在QTreeView上启用acceptDrops
  • 在我的自定义模型supportedDropActionsreturn Qt::CopyAction | Qt::MoveAction上实现
  • 在我的自定义模型mimeTypes上实现,以返回带有text/uri列表的QStringList
  • 在我的自定义模型dropMimeData上实现,以便在发生跌落时进行处理

这就是我在QTreeWidget上工作所需要的全部内容。

我已经转到:

  • 已实现return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled;的标志

然而,当我运行我的应用程序,并试图将Windows中的一个文件拖到我的QTreeView上时,我只得到了一个不允许的Ghostbusters风格的圆圈,上面有一个斜线。

我还需要做什么才能启用drop?

我终于自己解决了这个问题。

事实证明,问题是在flags函数中,在索引无效的情况下,我未能返回ItemIsDropEnabled标志。无效索引是根节点的信号,即视图中没有项目的区域,因此空格是不可丢弃的。

这很难检测到,因为我一直在尝试使用drop向树中添加项目,所以没有一个项目不使用drop,这意味着我看到的只是一个带斜线的圆圈。

对于那些面临类似问题的人,我想指出的是,有必要在支持的丢弃操作中返回Qt::CopyAction。单独使用Qt::MoveAction是行不通的。

相关内容

最新更新