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

前端 未结 3 1495
醉梦人生
醉梦人生 2020-12-10 03:48

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

相关标签:
3条回答
  • 2020-12-10 04:13

    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.

    0 讨论(0)
  • 2020-12-10 04:17

    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 讨论(0)
  • 2020-12-10 04:20

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

    0 讨论(0)
提交回复
热议问题