qt-QVariant-共用体

需要  #include<QVariant>
QVariant 类用于封装数据成员的类型及取值等信息,该类类似于 C++共用体 union,一个QVariant 对象,一次只能保存一个单一类型的值。该类封装了 Qt 中常用的类型,对于QVariant 不支持的类型 ( 比如用户自定义类型 ) ,则需要使用Q_DECLARE_METATYPE( Type )宏进行注册
QVariant 拥有常用类型的单形参构造函数,因此可把这些常用类型转换为 QVariant 类型,同时 QVariant 还重载了赋值运算符,因此可把常用类型的值直接赋给 QVariant 对象。注:由 C++语法可知,单形参构造函数可进行类型转换
注意:QVariant 没有 char 类型的构造函数,若使用 char 值会被转换为对应的 int 型
 
QVariant v(1); //调用 QVariant(int )构造函数创建一个 QVariant 类型的对象,并把数值 1 保存到 v 中
    //QVariant(int, 1)
    v=2.2; //调用 QVariant 的赋值运算符,把值 2 保存在 v 之中,因为 QVariant 是类似于共用体的类,因此同一时间只会保存一个值
    //QVariant(double, 2.2)
    QString str=v.typeName();  //返回v中保存数据的类型
    //"double"
    v='a';  //QVariant 没有专门的char构造函数,此处的字符a会被转换为 int 型,因此 v中存储的是数值 97,而不是字符 a
    //QVariant(int, 97)
    int n=v.value<int>();  //以int类型返回v中的值
    char ch=v.value<char>();  //以char类型返回v中的值
    //a
    QChar chh=v.toChar(); //以QChar类型返回v中的值
    //a
    str=v.toString(); //把v中的数据转化为QString字符串后返回
    //97

    str=v.typeToName(v.type()); //type()返回存储值的枚举形式表示的类型,typeToName()把它转化为QString字符串
    //"int"

    v.setValue('b');  //设置值
    //QVariant(char, b)
    //若是使用 QVariant 构造函数和直接赋值 char 型字符,此处会输出 int,这是 setValue 与他们的区别
    //通过setValue能保留数据的原类型



    qDebug()<<v;
    qDebug()<<str;

原文地址:https://www.cnblogs.com/liming19680104/p/13695531.html