I'm learning Python and Pyside. Especially Qt is Very hard to handle it. My tool accept draged and droped Files. and Sort by Natural order. Qlistview is filled by File name. It work OK till this point. But I want to move the position of Qlistview item. So Drag item and drop other position but listview don't any change or Delete a item.
Here is My code
class VideolistView (QtWidgets.QListView): def __init__(self, parent): super(VideolistView, self).__init__(parent) self.setObjectName("VideolistView") self.setGeometry(QtCore.QRect(8, 30, 250, 301)) self.setAcceptDrops(True) self.setDragEnabled(True) self.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) self.Fdir=None self.Model = QtGui.QStandardItemModel(self) self.ProxyModel = NaturalProxyModel(self) self.ProxyModel.setSourceModel(self.Model) self.setModel(self.ProxyModel) def dragEnterEvent(self, event): #if event.mimeData().hasUrls(): event.accept() def dragMoveEvent(self, event): #if event.mimeData().hasUrls(): event.accept() def dropEvent(self, event): if event.mimeData().hasUrls(): event.setDropAction(QtCore.Qt.LinkAction) event.accept() for url in event.mimeData().urls(): dropitem = str(url.toLocalFile()) Fname = os.path.split(dropitem) if not self.Fdir : self.Fdir = Fname[0] elif self.Fdir == Fname[0]: if not self.Model.findItems(Fname[1]): listitem = QtGui.QStandardItem(Fname[1]) listitem.setFlags(listitem.flags() & ~QtCore.Qt.ItemIsDropEnabled) self.Model.appendRow(listitem) else : print ("Not Same Folder") self.ProxyModel.setSourceModel(self.Model) self.ProxyModel.sort(0) self.setModel(self.ProxyModel) else: event.setDropAction(QtCore.Qt.MoveAction) event.accept()
With event.setDropAction(QtCore.Qt.MoveAction)
Releasing Item delete own
I change it to event.setDropAction(QtCore.Qt.CopyAction)
. But Drag and Drop don't Change anything at all.
How can I work properly Drag and Drop item?
ref : Qt Drag and Drop QListView removing the item on which it is released
According to ref, I add Code listitem.setFlags(listitem.flags() & ~QtCore.Qt.ItemIsDropEnabled)
But It didn't work.
Give me a Some Advice. Thank You for your Reading!