我正在尝试向QTreeWidget拖放功能添加约束,以防止分支进入另一个根中的另一个分支.
这是一个让事情更清楚的例子:
我有4个对象.让我们称他们为苹果,香蕉,胡萝卜,榴莲.
树看起来像这样:
isDelicious (Root)
|-- BackgroundObjects (Branch)
|-- Durian
|-- ForgroundObjects (Branch)
|-- Apple
|-- Banana
|-- Carrot
isSmelly (Root)
|-- BackgroundObjects (Branch)
|-- Apple
|-- Carrot
|-- ForgroundObjects (Branch)
|-- Banana
|-- Durian
Run Code Online (Sandbox Code Playgroud)
因此,允许将对象从BackgroundObjects拖放到ForgroundObjects,反之亦然,但是不允许将它们拖放到不同根目录上的分支上.
我已经尝试重新实现和子类化dragMoveEvent,dragEnterEvent和dropEvent,如果我在dragEnterEvent中对事件调用accept,它将调用dragMoveEvent(我期望).但是,只有当我退出QTreeWidget时才会调用dropEvent.
我想要做的是在移动之前检查所选对象的祖父母,以及建议的新祖父母以查看它们是否相同.如果是,那么接受此举.否则忽略此举.
我已经搜索过是否有任何答案,到目前为止我还没有看到任何我正在尝试做的事情.可能最接近的是来自Stack Overflow的这两个问题:
https
://stackoverflow.com/questions/17134289/managing-drag-and-drop-within-qtreewidgets-in-pyside qt:QTreeView - 限制拖放只发生在一个特殊的祖父母(祖先)内