2017-01-26 1 views
0

QTreeWidget에 간단한 트리가 있습니다 (필자는 pyqt를 사용하지만 중요하지는 않습니다). 이 트리에서 항목을 이동할 때 데이터베이스를 변경하려고하므로 이동하기 전에이 항목의 부모 인이 항목 개체를 가져오고이 항목 개체의 부모는 이동 한 후에이 항목 개체를 가져 오려고합니다. 그러나 나는 그들이 어떻게 얻을 수 있는지 이해하지 못한다. qtreewidget에는 드래그 앤 드롭을위한 특별한 신호가 없습니다.qtreewidget에서 소스 및 대상 끌어서 놓기

답변

0

내 상황에 대한 답을 찾았습니다. 관심있는 사람이있을 수 있습니다.

class Ui_MainWindow(object): # automatically generated with pyuic5 
    def setupUi(self, MainWindow): 
     ... 
     self.recordsTree = QtWidgets.QTreeWidget(self.centralWidget) 
     ... 

class CustomTree(object): 
    def startDrag(self, actions): 
     row = self.selectedItems()[0] 
     self._prev_parent = row.parent().data(0, 0) 
     self._what_move = row.data(0,0) 
     return QTreeWidget.startDrag(self, actions) 
    def dropEvent(self, event): 
     row_index = self.indexAt(event.pos()).row() 
     self._new_parent = self.topLevelItem(row_index).data(0, 0) 
     my_custom_collback(self._prev_parent, self._what_move, self._new_parent) # <- that what i needed 
     return QTreeWidget.dropEvent(self, event) 


class MainWindow(Ui_MainWindow): 
    def setupUi(self, m): 
     r = super(MainWindow, self).setupUi(m) 
     self.recordsTree.startDrag = types.MethodType(CustomTree.startDrag, self.recordsTree) 
     self.recordsTree.dropEvent = types.MethodType(CustomTree.dropEvent, self.recordsTree) 
     return r