代码之家  ›  专栏  ›  技术社区  ›  gct

如何在qt中解码“application/x-qabstratemModelDataList”进行拖放?

  •  15
  • gct  · 技术社区  · 15 年前

    我已经创建了一个qtreeWidget的子类,我希望能够从另一个树小部件(不过我想自己处理插入)以及qlistWidget中拖动项目。

    我已经重写了类中的DropEvent方法,它看起来像是我从qtreeWidget获取的数据的mimetype是application/x-qabstratemmodeldatalist,我如何对其进行解码,以从树中取出这些项?

    3 回复  |  直到 6 年前
        1
  •  23
  •   Kaleb Pederson    15 年前

    您可以按如下方式解码:

    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 */
    }
    

    这个 QMap<int, QVariant> 归还的是什么 QAbstractItemModel::itemData(index) 用于表示 (row, col) .

        2
  •  3
  •   gct    15 年前

    看起来您可以使用qStandardItemModel对数据进行解码,然后将项目取出。但不知道这是否是最好的方法:

      model = QStandardItemModel()
      model.dropMimeData(event.mimeData(), Qt.CopyAction, 0,0, QModelIndex())
    

    然后,您可以使用模型中的item()方法来检索该项并根据需要对其进行处理。

        3
  •  0
  •   Rajiv Sharma    6 年前

    在Pyside2这对我有用

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