开发者

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

开发者 https://www.devze.com 2022-12-11 11:25 出处:网络
I\'ve created a child class of QTreeWidget that I want to be able to drag items from another tree widget too (I w开发者_StackOverflow社区ant to handle the insertion myself though), as well as from a Q

I've created a child class of QTreeWidget that I want to be able to drag items from another tree widget too (I w开发者_StackOverflow社区ant 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.


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()) 
0

精彩评论

暂无评论...
验证码 换一张
取 消