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 a QListWidget.
I've overridden the dropEvent method in my class, and it looks like the mimetype of the data I'm getting from my QTreeWidget is application/x-qabstractitemmodeldatalist, how can I decode this to get the items from the tree back out?
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)
.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With