I\'ve created a child class of QTreeWidget that I want to be able to drag items from another tree widget too (I want to handle the insertion myself though), as well as from
Looks like you can use QStandardItemModel to decode the data and get an item back out. Don't know if this is the best way to do it though:
model = QStandardItemModel()
model.dropMimeData(event.mimeData(), Qt.CopyAction, 0,0, QModelIndex())
Then you can use the item() method from model to retrieve the item and handle it however you want.
In PySide2 this works for me
def dropEvent(self, event):
if event.mimeData().hasFormat('application/x-qabstractitemmodeldatalist'):
data = event.mimeData()
source_item = QtGui.QStandardItemModel()
source_item.dropMimeData(data, QtCore.Qt.CopyAction, 0,0, QtCore.QModelIndex())
print(source_item.item(0, 0).text())
You can decode it as follows:
QByteArray encoded = qMimeData->data("application/x-qabstractitemmodeldatalist");
QDataStream stream(&encoded, QIODevice::ReadOnly);
while (!stream.atEnd())
{
int row, col;
QMap<int, QVariant> roleDataMap;
stream >> row >> col >> roleDataMap;
/* do something with the data */
}
The QMap<int, QVariant>
is what is returned by QAbstractItemModel::itemData(index) for the index representing (row, col)
.