首页 文章

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

提问于
浏览
15

我已经创建了一个QTreeWidget的子类,我希望能够从另一个树小部件中拖动项目(我想要自己处理插件),以及从QListWidget .

我已经覆盖了我的类中的dropEvent方法,看起来我从QTreeWidget获取的数据的mimetype是application / x-qabstractitemmodeldatalist,我如何解码这个以从树中取出项目?

3 回答

  • 23

    您可以按如下方式解码它:

    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) 的索引返回的内容 .

  • 3

    看起来您可以使用QStandardItemModel来解码数据并将项目退出 . 不知道这是否是最好的方法:

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

    然后,您可以使用模型中的item()方法来检索项目并根据需要处理它 .

  • 0

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

相关问题