【发布时间】:2012-07-04 12:55:16
【问题描述】:
我正在实现一个视图和一个模型,我希望在其中支持在内部移动项目(通过拖动)和复制项目(通过在拖动时按 Ctrl)。我已经按照说明完成了我需要做的所有事情。我已经设置了 mime 函数,我已经实现了 removeRows() 和 flags()。问题是当我拖动时,它默认为复制操作(我得到带有加号的箭头光标,它确实通过在模型中创建一个新项目来复制项目)。
我能看到的唯一区别是:如果我在supportedDropActions() 中只返回Qt::MoveAction,它只会移动。如果我返回 (Qt::CopyAction | Qt::MoveAction),它只会复制。
有什么想法吗?我希望它像 Nautilus (Gnome) 或 Windows 文件资源管理器中的文件一样工作:拖动移动图标,ctrl+drag 复制它们。
【问题讨论】:
-
同样的问题出现在 Windows 上,但
Qt::MoveAction是首选。 -
如果有人愿意,我可以发布一些示例代码来演示问题。
-
既然这最终没有回答我的问题,谁觉得他们应该得到赏金?
-
我是在 Qt 4.7 中将 setDefaultDropAction() 添加到 QAbstractItemView 的人,这是否意味着我应该得到赏金? :-)
-
大卫,我会考虑给你赏金,但我没有发布它,我什至不知道它,而且它看起来在发布一个月后就结束了。无论如何,感谢您对 Qt 和 KDE 的贡献! (附带说明一下,它仍然困扰着我——有 SIX (6) 个与项目视图的拖放相关的属性!六个!acceptDrops、showDropIndicator、dragEnabled、dragDropOverwriteMode、dragDropMode 和您的defaultDropAction。当然还有一连串代码要编写来执行 MIME 类型,使用 removeRows()、flags() ——就像我说我喜欢 Qt 但哇,拖放很复杂!)
标签: c++ qt ubuntu drag-and-drop gnome