Skip to content

Drag and drop in itemviews occasionally crashes #3

Description

@pathmann

Occasionally (can't reproduce it) the hosting app will crash when starting to drag an item in any itemview.

The reason seems to be a call to mimeTypes in the PythonQtShell implementation of the model.

Script to reproduce this:

fromPythonQt.QtCoreimportQt, QMimeDatafromPythonQt.QtGuiimportQTreeView, QStandardItemModel, QStandardItem, QAbstractItemViewclassmymodel(QStandardItemModel):
def__init__(self, rows, cols, parent=None):
super().__init__(rows, cols, parent)
self.mimecache= []
defflags(self, index):
default=Qt.ItemIsSelectable|Qt.ItemIsEnabledifindex.isValid():
returndefault|Qt.ItemIsDragEnabled|Qt.ItemIsDropEnabledelse:
returndefaultdefmimeTypes(self):
return ["text/plain"]
defsupportedDropActions(self):
returnQt.MoveActiondefmimeData(self, indexes):
try:
mimedata=QMimeData()
mimedata.setText(" ".join(map(lambdax: x.data(), indexes)))
self.mimecache.append(mimedata) #we have to keep this in scope!returnmimedataexceptExceptionase:
return0defcanDropMimeData(self, mimedata, action, row, column, parent):
ifnotmimedata.hasText() ornotparent.isValid() ornotaction&self.supportedDropActions() orrow!=-1:
returnFalsereturnTruedefdropMimeData(self, mimedata, action, row, column, parent):
ifaction!=Qt.MoveAction:
returnFalseifnotmimedata.hasText():
returnFalseifmimedata.text() =="":
returnTrueparitem=self.itemFromIndex(parent)
nitem=QStandardItem(mimedata.text())
paritem.appendRow(nitem)
returnTruetv=QTreeView(None)
tv.setAttribute(Qt.WA_DeleteOnClose)
model=mymodel(4, 0, tv)
forrowinrange(4):
model.setItem(row, 0, QStandardItem("%s"%row))
tv.setDragEnabled(True)
tv.setDropIndicatorShown(True)
tv.setDragDropMode(QAbstractItemView.InternalMove)
tv.setModel(model)
tv.show()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions