前言

最近在搞树形间拖拽时发现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;

结果

Qt QVariant常用用法及QVariant和QList<QVariant>互转_c/c

QVariant和QList<int>互转

   QList<QString> list = {"chiyuba.com", "itzhai.cn"};
    QVariant var;
    var.setValue(list);

    QList<QString> varList = var.value<QList<QString> >();
    qDebug() << varList;

结果

Qt QVariant常用用法及QVariant和QList<QVariant>互转_c/c_02

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;

结果

Qt QVariant常用用法及QVariant和QList<QVariant>互转_c/c_03

总结

QVariant用起来还是挺方便的,可以存储很多的类型。多看文档,多看文档,多看文档。