gpt4 book ai didi

python - 在 PySide PyQt 中拖放 QAbstractItemModel

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:50 33 4
gpt4 key购买 nike

我一直在努力学习如何使用 QTreeView 和自定义 Item 类来实现 QAbstractItemModel,除了拖放之外,我的一切都正常工作。

最终我希望能够使用 shift 键在移动和复制项目之间切换,但现在我只是想让 InternalMove 正常工作....

我正在像这样重新实现 mimeData 和 dropMimeData....

class BuildModel( QAbstractItemModel ):
def __init__( self, root):
super( BuildModel, self ).__init__()

def mimeTypes( self ):
return ['sushi-build-items']

def mimeData( self, indices ):
mimedata = QMimeData()
mimedata.setData('sushi-build-items', self.getSerializedData(indices) )
return mimedata

def dropMimeData( self, mimedata, action, row, column, parentIndex ):
if not mimedata.hasFormat( 'sushi-build-items' ):
return False
data = pickle.loads((str(mimedata.data('sushi-build-items'))))
items = dataToItems(data)
self.insertItems(row, items, parentIndex)
return True

def insertItems( self, row, items, parentIndex):
parent = self.itemFromIndex(parentIndex)
self.beginInsertRows( parentIndex, row, row+len(items)-1 )
if row == -1:
parent.addChildren(items)
else:
parent.insertChildren(row, items)
self.endInsertRows()
self.dataChanged.emit(parentIndex, parentIndex)
return True

我的 TreeView 设置为 InternalMove 就像这样....

class TreeView(QTreeView):
def __init__(self, parent = None, model = None):

super(TreeView, self).__init__(parent = parent)
self.setDragDropMode(QAbstractItemView.InternalMove)
self.setDragEnabled(True)
self.setAcceptDrops(True)

但是当我拖放源项目时,源项目保持原样,它只是删除一个重复的项目。拖动项的移除不应该由 TreeView 处理吗?如果不是,我应该在哪里手动删除它?

我确信我在这里遗漏了一些东西..

最佳答案

您需要在模型中实现removeRows 方法;它应该被自动调用。

关于python - 在 PySide PyQt 中拖放 QAbstractItemModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22793205/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com