pyqt或pyside Qlistview拖放删除项

时间:2017-10-06 19:11:38

标签: python drag-and-drop pyqt pyside qlistview

我正在学习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)但它没有用。 给我一些建议。谢谢你的阅读!

0 个答案:

没有答案