【问题标题】:PyQT, Drag&Drop: Disable copy, only allow movePyQT,拖放:禁用复制,只允许移动
【发布时间】:2016-03-01 15:52:47
【问题描述】:

我想使用以下拖放行为创建 2 个 QListWidget(我们称它们为“A”和“B”):

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

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

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

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

谁能指点我在哪里看?

谢谢。

【问题讨论】:

  • 我假设您仍然需要在 "A" 内移动项目。
  • 不,不能在列表“A”内移动。也许排序,但我认为这与这个问题无关。

标签: qt drag-and-drop pyqt


【解决方案1】:

这似乎解决了我的问题:

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

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

【讨论】:

    【解决方案2】:

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

    请参阅dropEvent 以了解如何 设置 mimeData 的相同示例

    【讨论】:

      【解决方案3】:

      如果您不需要在列表“A”内移动项目,解决方案很简单:

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

      【讨论】:

      • 这对我来说并不能解决第 2 点。我仍然可以通过按命令键从copy 切换到move
      猜你喜欢
      • 2014-11-12
      • 2015-07-09
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多