gpt4 book ai didi

qt - 重新排序项目 QAbstractListModel -- dropMimeData 从未调用

转载 作者:行者123 更新时间:2023-12-05 01:13:57 26 4
gpt4 key购买 nike

我有课MyListModel ,它继承自使用 QListView 或自定义子类显示的 QAbstractListModel。我希望列表中的每个项目都是可编辑的,并且用户能够拖放以重新排列项目的顺序(我实际上并不相信 QListView 是要走的路,但它看起来像不会有太多麻烦。哦,好吧。)。

这些项目是可拖动的,但会显示一个带叉的小圆圈,这意味着我不能在那里放任何东西。

我尝试了 this question 中建议的所有内容,似乎没有任何效果。 dropMimeData函数永远不会被调用,尽管 mimeData似乎产生了我的占位符数据。

我不认为我在其他类(class)中做错了什么,所以我只是将模型类(class)放在这篇文章中。间距可能有点时髦。

感谢您的任何帮助。

我的模型:

class MyListModel(QtCore.QAbstractListModel):

def __init__(self, parent, items=None):
super(self.__class__, self).__init__()
print "initiating MyListModel"
self.parent = parent
self._items = list()

for thing in items:
self._items.append(thing)

self.setSupportedDragActions(QtCore.Qt.MoveAction)

def rowCount(self, parent = QtCore.QModelIndex()):
return len(self._items)

def data(self, index, role = QtCore.Qt.DisplayRole):
if (role == QtCore.Qt.DisplayRole) or (role == QtCore.Qt.EditRole):
return self._items[index.row()].name
else:
return

def setData(self, index, value, role=QtCore.Qt.EditRole):
print "Setting Data", value, "at", index.row(),

if role == QtCore.Qt.EditRole:
print "EditRole"
self._items[index.row()].name = value
return True
elif role == QtCore.Qt.DisplayRole:
print "DisplayRole"
print role
return False
else:
print "other"
print role
return False


def flags(self, index):
return (QtCore.Qt.ItemIsEnabled |
QtCore.Qt.ItemIsSelectable |
QtCore.Qt.ItemIsEditable |
QtCore.Qt.ItemIsDragEnabled |
QtCore.Qt.ItemIsDropEnabled)

def insertRows(self, row, count, parent):
print "insertRows"
self.beginInsertRows(parent, row, (row + (count - 1)))
#self._items.insert(row, object)
self.endInsertRows()
return True


def supportedDropActions(self):
print "supportedDrop"
return (QtCore.Qt.MoveAction | QtCore.Qt.CopyAction)

def supportedDragActions(self):
print "supportedDraw"
return (QtCore.Qt.MoveAction | QtCore.Qt.CopyAction)

def mimeData(self, indexes):
print "mimeData at (", indexes[0].row(), ",", indexes[0].column(), ")",
self.old_index = indexes[0].row()

old_stuff = pickle.dumps(self._items[indexes[0].row()])
print type(old_stuff)
mimeData = QtCore.QMimeData()
mimeData.setText(old_stuff)

return mimeData

def dropMimeData(self, data, action, row, column, parent):
print "dropMimeData"
'''
self.beginInsertRows(parentIndex, row, row)

if action == QtCore.Qt.IgnoreAction:
return True

if data.hasText():
print data
return False
'''

def mimeTypes(self):
print 'mimeTypes'
return list("text/plain")

最佳答案

mimeData方法,尝试更改mimeData = QtCore.QMimeData()mimeData = super(MyListModel, self).mimeData(indexes) .

我认为 mimeData 的生命周期存在问题对象,如果您自己创建它,它会很快被删除。如果您执行上述操作,它似乎具有正确的生命周期。不过,这只是一个猜测。

关于qt - 重新排序项目 QAbstractListModel -- dropMimeData 从未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662007/

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