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

gct*_*gct 15 qt qt4

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

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

Kal*_*son 26

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

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 */
}
Run Code Online (Sandbox Code Playgroud)

QMap<int, QVariant>QAbstractItemModel::itemData(index)索引表示返回的内容(row, col).


gct*_*gct 6

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

  model = QStandardItemModel()
  model.dropMimeData(event.mimeData(), Qt.CopyAction, 0,0, QModelIndex())
Run Code Online (Sandbox Code Playgroud)

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