如何获取发生拖放的项目
下面的代码创建了一个 QTreeWidget
,里面有五个项目。
我想知道在内部拖放操作后,如何获取到被拖放到的项目(或者它的索引)。比如说,如果我选择了Item_4,然后把它拖到Item_2上。那么我想要得到的是“Item_2”,也就是接收了被拖放项目的那个项目。
0. startDrag(): <PyQt4.QtCore.DropActions object at 0x10f5d1230>
1. dragEnterEvent(): <PyQt4.QtGui.QDragEnterEvent object at 0x10f5cb6d8>
2. dropEvent(): <PyQt4.QtGui.QDropEvent object at 0x10f5cb6d8>
3. startDrag(): <PyQt4.QtCore.DropActions object at 0x10f5d1230>
========
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])
class Tree(QtGui.QTreeWidget):
def __init__(self, *args, **kwargs):
super(Tree, self).__init__()
self.setDragDropMode(self.DragDrop)
for each in ['Item_1','Item_2','Item_3','Item_4','Item_5']:
item=QtGui.QTreeWidgetItem([each])
self.addTopLevelItem(item)
self.setColumnCount(1)
self.resize(360,240)
self.show()
def startDrag(self, actions):
print '0. startDrag(): %s'%actions
super(Tree, self).startDrag(actions)
print '3. startDrag(): %s \n'%actions
def dragEnterEvent(self, event):
super(Tree, self).dragEnterEvent(event)
print '1. dragEnterEvent(): %s'%event
def dropEvent(self, event):
super(Tree, self).dropEvent(event)
print '2. dropEvent(): %s'%event
tree=Tree()
sys.exit(app.exec_())
1 个回答
1
你可以在 QDropEvent
类中使用 QPoint pos (self)
,然后结合 QTreeWidgetItem QTreeWidget.itemAt (self, QPoint p)
来获取目标位置上的 QTreeWidgetItem
。
.
.
def dragMoveEvent (self, eventQDragMoveEvent):
QtGui.QTreeWidget.dragMoveEvent(self, eventQDragMoveEvent)
sourceQCustomTreeWidget = eventQDragMoveEvent.source()
if isinstance(sourceQCustomTreeWidget, QtGui.QTreeWidget):
print '#############'
sourceQTreeWidgetItem = sourceQCustomTreeWidget.currentItem()
if sourceQTreeWidgetItem != None:
print 'Source :', sourceQTreeWidgetItem.text(0)
else:
print 'Source : None'
destinationQTreeWidgetItem = self.itemAt(eventQDragMoveEvent.pos())
if destinationQTreeWidgetItem != None:
print 'Destination :', destinationQTreeWidgetItem.text(0)
else:
print 'Destination : None'
.
.
QTreeWidgetItem QTreeWidget.itemAt (self, QPoint p)
参考链接 :
http://pyqt.sourceforge.net/Docs/PyQt4/qtreewidget.html#itemAt
QPoint QDropEvent.pos (self)
参考链接 :
http://pyqt.sourceforge.net/Docs/PyQt4/qdropevent.html#pos
祝好,