Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to decode "application/x-qabstractitemmodeldatalist" in Qt for drag and drop?

Tags:

qt

qt4

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?

like image 360
gct Avatar asked Nov 12 '09 17:11

gct


2 Answers

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).

like image 100
Kaleb Pederson Avatar answered Sep 30 '22 05:09

Kaleb Pederson


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.

like image 41
gct Avatar answered Sep 30 '22 07:09

gct