前言
最近在搞树形间拖拽时发现QMimeData的重载函数retrieveData返回的是一个QVariant,但是我需要返回的是QList<QTreeWidgetItem>,这下可难到了。 然后仔细查看可以使用自定义类型,于是使用了一下,真的很棒。接下来看一下QVariant的常用用法。
QVariant基本用法(QString为例)
QVariant转QString互转
QString str = "https://itzhai.cn";
QVariant var;
var.setValue(str);
QString varStr = var.toString();
qDebug() << "varStr: " << varStr;
结果
QVariant和QList<int>互转
QList<QString> list = {"chiyuba.com", "itzhai.cn"};
QVariant var;
var.setValue(list);
QList<QString> varList = var.value<QList<QString> >();
qDebug() << varList;
结果
QVariant和QList<MyStruct>互转(MyStruct为自定义结构体)
// 定义结构体
typedef struct myCus {
QList<QTreeWidgetItem *> lists;
QList<int> list2;
} MyCus;
// 注册自定义类型
Q_DECLARE_METATYPE(MyCus);
// 使用自定义类型
MyCus my;
my.list2 = {0, 1};
QVariant var;
var.setValue(my);
MyCus m = var.value<MyCus>();
qDebug() << m.list2;
结果
总结
QVariant用起来还是挺方便的,可以存储很多的类型。多看文档,多看文档,多看文档。