QTreeWidget 中的拖放操作不复制放置的项目
Drag Drop Operation in QTreeWidget not copying the dropped item
我想通过鼠标拖放操作从 QTreeWidget
-父级 复制 一个项目到另一个父级下。
为此,我实施了 dropEvent()
并将 dropAction
设置为 Qt.CopyAction
。
但无论如何,我正在删除的项目并没有被复制到新父项下。
例如。 -> 将用户 "schmidt" 拖到组 "LON".
下
预期行为:我正在删除的项目被复制到新的父项下。 (例如,用户 "schmidt" 将被添加到组 "LON" 下)。
完整的工作代码示例:
#!/usr/bin/env python3
# coding = utf-8
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyTreeWidget(QtWidgets.QTreeWidget):
def __init__(self):
QtWidgets.QTreeView.__init__(self)
self.setSelectionMode(self.SingleSelection)
self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
self.setDragEnabled(True)
self.setAcceptDrops(True)
self.setDropIndicatorShown(True)
def dropEvent(self, event):
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.tree = MyTreeWidget()
self.tree.setRootIsDecorated(True)
self.tree.setHeaderHidden(True)
self.setCentralWidget(self.tree)
itemUsers = QtWidgets.QTreeWidgetItem(self.tree, ["User"])
itemUsers.addChild(QtWidgets.QTreeWidgetItem(itemUsers, ["schmidt"]))
itemUsers.addChild(QtWidgets.QTreeWidgetItem(itemUsers, ["weber"]))
itemMdt = QtWidgets.QTreeWidgetItem(self.tree, ["Group"])
itemMdt.addChild(QtWidgets.QTreeWidgetItem(itemMdt, ["FFM"]))
itemMdt.addChild(QtWidgets.QTreeWidgetItem(itemMdt, ["LON"]))
itemMdt.addChild(QtWidgets.QTreeWidgetItem(itemMdt, ["NY"]))
self.show()
self.setGeometry(400, 400, 400, 400)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ui = MyMainWindow()
sys.exit(app.exec_())
删除 dropEvent 方法。
TL;博士;
没有必要覆盖 dropEvent 方法,因为它已经实现了复制项目的所有逻辑。
我想通过鼠标拖放操作从 QTreeWidget
-父级 复制 一个项目到另一个父级下。
为此,我实施了 dropEvent()
并将 dropAction
设置为 Qt.CopyAction
。
但无论如何,我正在删除的项目并没有被复制到新父项下。
例如。 -> 将用户 "schmidt" 拖到组 "LON".
预期行为:我正在删除的项目被复制到新的父项下。 (例如,用户 "schmidt" 将被添加到组 "LON" 下)。
完整的工作代码示例:
#!/usr/bin/env python3
# coding = utf-8
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyTreeWidget(QtWidgets.QTreeWidget):
def __init__(self):
QtWidgets.QTreeView.__init__(self)
self.setSelectionMode(self.SingleSelection)
self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
self.setDragEnabled(True)
self.setAcceptDrops(True)
self.setDropIndicatorShown(True)
def dropEvent(self, event):
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.tree = MyTreeWidget()
self.tree.setRootIsDecorated(True)
self.tree.setHeaderHidden(True)
self.setCentralWidget(self.tree)
itemUsers = QtWidgets.QTreeWidgetItem(self.tree, ["User"])
itemUsers.addChild(QtWidgets.QTreeWidgetItem(itemUsers, ["schmidt"]))
itemUsers.addChild(QtWidgets.QTreeWidgetItem(itemUsers, ["weber"]))
itemMdt = QtWidgets.QTreeWidgetItem(self.tree, ["Group"])
itemMdt.addChild(QtWidgets.QTreeWidgetItem(itemMdt, ["FFM"]))
itemMdt.addChild(QtWidgets.QTreeWidgetItem(itemMdt, ["LON"]))
itemMdt.addChild(QtWidgets.QTreeWidgetItem(itemMdt, ["NY"]))
self.show()
self.setGeometry(400, 400, 400, 400)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
ui = MyMainWindow()
sys.exit(app.exec_())
删除 dropEvent 方法。
TL;博士;
没有必要覆盖 dropEvent 方法,因为它已经实现了复制项目的所有逻辑。