我已经创建了一个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).
看起来您可以使用 QStandardItemModel 解码数据并取回项目。不知道这是否是最好的方法:
model = QStandardItemModel()
model.dropMimeData(event.mimeData(), Qt.CopyAction, 0,0, QModelIndex())
Run Code Online (Sandbox Code Playgroud)
然后您可以使用模型中的 item() 方法来检索项目并根据需要处理它。