2016-03-01 37 views
0

我想创建2 QListWidget(姑且称之为“A”和“B”)具有以下将&拖放行为:PyQt的,拖放:禁止复制,只允许移动

  • 条目可以从“A”复制到“B”

  • 条目不能从“A”移动到“B”

  • 项不能被移动或从“B”至“A”

  • 复制

最后一点不是问题,但我无法找到一种方法来禁用移动操作,同时允许从“A”复制到“B”。

有人能指点我在哪里看?

谢谢。

+0

我假设你仍然需要移动项目* *内“A”。 – ekhumoro

+0

不,不在列表“A”内移动。也许排序,但我认为这与这个问题无关。 – rmweiss

回答

0

您将不得不将mimeData设置为独占值(可能类似于“myapplication/somewidget-somefeature”),请参阅dragEnterEvent in the draggable example以了解如何接受/拒绝拖动。

dropEvent对同样的例子在如何设置mimeData

0

如果您不需要内名单 “A” 移动项目,解决方法很简单:

self.listA.setDragEnabled(True) 
    self.listB.setAcceptDrops(True) 
+0

这对我来说并不能解决问题2。我仍然可以通过按命令键从'copy'切换到'move'。 – rmweiss

1

这似乎解决我的问题:

class ListB(QtGui.QListWidget): 
    def __init__(self, parent): 
     super(ListB, self).__init__(parent) 
     self.setAcceptDrops(True) 

    def supportedDropActions(self): 
     return QtCore.Qt.CopyAction