我有一个继承自 QTreeView 的自定义模型。我启用了拖放功能,目前可以将一个项目放到树上。但是,您目前可以拖放到现有项目上或项目之间。我想对此进行限制,以便您只能放到现有项目上。
我已将 DragDropOverwriteMode 设置为 true(实际上这是 QTreeView 的默认值)。但是,这并不能阻止您在项目之间放置 - 它只是意味着您也可以放置到现有项目上。
我知道我可以忽略 dropMimeData(我正在重新实现)中的“插入”滴,方法是检查行和列是否有效(滴到现有项目上的行和列设置为 -1,父级设置为当前项目),我正在这样做。但是,我不想得到这些滴。 IE。我希望它能让你总是在上面的项目或下面的项目上放下,而不是在项目之间。
有什么想法吗?
感谢您的任何建议, 吉尔斯
最佳答案
您需要通过在自定义 View 中重新实现 dragEnterEvent
方法来捕获拖动输入事件。 Qt 文档中的示例是:
void Window::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("text/plain"))
event->acceptProposedAction();
}
在您的情况下,您可能需要将事件中的 x 和 y 位置与最近项目的 x 和 y 位置或类似的东西进行比较,并根据该信息拒绝或接受建议的操作。
来自 QAbstractItemModel::dropMimeData
文档:
It is the responsibility of the view to provide a suitable location for where the data should be inserted.
我的解释是,如果底层模型(例如您的模型)不支持该 View ,则该 View 应拒绝丢弃。
关于c++ - Qt QTreeView : Only allow to drop on an existing item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6942098/