我正在学习Python和Pyside。特别是Qt很难处理它。 我的工具接受拖延和下载的文件。并按自然顺序排序。 Qlistview由文件名填充。它工作正常,直到这一点。 但我想移动Qlistview项目的位置。因此,拖动项目并删除其他位置但列表视图不做任何更改或删除项目。
这是我的代码
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()
使用event.setDropAction(QtCore.Qt.MoveAction)
释放项目删除自己
我将其更改为event.setDropAction(QtCore.Qt.CopyAction)
。但是拖放根本不会改变任何东西。
我怎样才能正常拖放项目?
参考:Qt Drag and Drop QListView removing the item on which it is released
根据参考,我添加了代码listitem.setFlags(listitem.flags() & ~QtCore.Qt.ItemIsDropEnabled)
但它没有用。
给我一些建议。谢谢你的阅读!