私はクラスMyListModel
を持っています。これはQListViewまたはカスタムサブクラスを使用して表示されているQAbstractListModelから継承されています。私はリストの各項目を編集可能にしたいと思います。ユーザーがドラッグアンドドロップして項目の順序を並べ替えることができるようにしたいと思います(私は実際にQListViewを使う方法を確信していませんが、あまりにも多くのトラブルなしで動作します。)アイテムの並べ替えQAbstractListModel - dropMimeDataは呼び出されません
アイテムはドラッグ可能ですが、少し外に出ている円を表示しています。つまり、何もドロップできません。
私はthis questionで提案されたすべてを試しましたが、何も動作していないようです。 dropMimeData
関数は呼び出されませんが、mimeData
はプレースホルダデータを生成するようです。
私は他のクラスで何か間違っているとは思わないので、モデルクラスをこの投稿に入れています。スペーシングはちょっとファンキーです。
ありがとうございました。
マイモデル:
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")