Qt之QVariant

1.简介

QVariant可以存储各种数据类型,如QColor等,包括容器类型的值,如QStringlist,Qt很多功能都是建立在QVariant类的基础上的,如Qt对象属性以及数据库功能等;在代码片段中,主要分两种情况讨论QVariant的应用:
基本数据类型、自定义数据类型。

2.代码片段

//一.基本数据类型

QVariant number(27); //定义一个名为number的QVariant变量,并初始值为27,那么在这里相当于int型
    qDebug()<//打印结果:QVariant(int, 27)
    qDebug()<"who");
    strList.append("are");
    strList.append("you");

    QMap myMap;
    myMap.insert("one",45); //int
    myMap.insert("two","hello"); //qstring
    myMap.insert("three",QColor(0,0,0)); //qcolor
    myMap.insert("four",strList); //QStringList 类型,就是所谓的容器类型值
    //    myMap.insert("five",map); //尝试了一下,结果这里无法转化,可能是不支持这种数据类型吧,map为QMap类型
    QMapIterator x(myMap);
    for(;x.hasNext();)
    {
        qDebug()<value();
#if 0
        if(x.next().value().type() == QVariant::StringList) //判断QVariant类型,这里是判断是否为QStringList,更多的可以找手册查询一下
        {
            //           qDebug()<
            QString str=QString("%1").arg(x.key()); //找到数据类型为QStringList的值对应的键,再通过键找到值,这里不能直接用x.next().value(),因为next会跳到下一个键值对
            qDebug()<//必要的转化
            for(int m=0;m//遍历QStringList
            {
                qDebug()<#endif
        //        qDebug()<
    }

//二.自定义数据类型
因为自定义数据类型是系统中不存在的,即使创建,也需要注册一下,方便编译器识别

struct myStruct //自定义的数据类型
{
    int age;
    char name[10];
};
Q_DECLARE_METATYPE(myStruct)  //注册,必不可少

//上面这部分代码一般在头文件中完成

//    myStruct stu=  //结构体初始化
//    {
//        100,
//        "wangLei"
//    };
    myStruct stu;
    stu.age = 100;//也可以先定义变量后这样赋值
    strcpy(stu.name,"Hello./n");

    QVariant v;
    v.setValue(stu); //设置QVariant的值
    qDebug()<<"v:"<//这部分代码主要是将QVariant类再转化为myStruct类,其他QVariant类转化成其他类也可用这种方法
    s=v.value();
    qDebug()<<"s:"<

你可能感兴趣的:(Qt)