其他分享
首页 > 其他分享> > c – Qt QTreeView:仅允许放置现有项目

c – Qt QTreeView:仅允许放置现有项目

作者:互联网

我有一个从QTreeView继承的自定义模型.我已启用拖放功能,并且当前可以将项目拖放到树上.但是,您当前可以放入现有项目或项目之间.我想限制这一点,以便您只能删除现有项目.

我已将DragDropOverwriteMode设置为true(实际上这是QTreeView的默认值).但是,这并不能阻止您在项目之间删除 – 这只意味着您也可以放弃现有项目.

我知道我可以通过检查行和列是否有效来忽略dropMimeData中的“插入”丢弃(通过检查现有项目是否将行和列设置为-1并将父项设置为当前项目)我这样做.但是,我不希望得到这些滴剂. IE浏览器.我希望它能让你总是掉到上面的项目或下面的项目,从不在项目之间.

有任何想法吗?

谢谢你的建议,
贾尔斯

解决方法:

您需要通过在自定义视图中重新实现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.

我已经解释为意味着视图应该拒绝丢弃,如果它不是由底层模型支持的东西,比如你的.

标签:qtreeview,c,qt
来源: https://codeday.me/bug/20190903/1795434.html