首页 > 其他分享 >5、QVariant

5、QVariant

时间:2023-12-01 16:56:36浏览次数:30  
标签:QVariant qmap qDebug student 类型 qt

QVariant,被称为万能数据类型,实际上它是类似C++的联合union类型。简单的说自定义性能强就像一个盒子几乎可以让你放任意的qt类型,同时可以轻松构造任意类型的任意复杂数据结构,但请注意复杂类型意味着性能和效率的让步。

qt6在文档中如下描述:

由于C++禁止联合union包含具有非默认构造函数或析构函数的类型,这会导致好多继承的类qt类不能在联合中使用。如果没有 QVariant,这对 QObject::property()和数据库工作等来说将是一个问题,故引入该类型。

QVariant支持常见类型

它几乎支持常见的qt中所有类型,在使用过程中就可以轻松的保存很多类型的值,有点类似盒子,尽管放就行。

 

 QMap<QString,QVariant> qmap;
    qmap["int"]=100;
    qmap["double"]=100.00;
    qmap["string"]="Good";
    qmap["color"]=QColor(255,255,0);

    //输出:转换函数来处理
    qDebug() << qmap["int"] << qmap["int"].toInt();
    qDebug() << qmap["double"] << qmap["double"].toDouble();
    qDebug() << qmap["string"] << qmap["string"].toString();
    qDebug() << qmap["color"] << qmap["color"].value<QColor>();


    //创建一个字符串列表QStringList
    qDebug() << endl;

    QStringList qsl;


    qsl<<"a"<<"b"<<"c"<<"d";

    QVariant qvsl(qsl);
    if(qvsl.type()==QVariant::StringList){
        QStringList qlist=qvsl.toStringList();
        for (int i = 0; i < qlist.size(); ++i) {
            qDebug() << qlist.at(i);//输出列表数据
        }
    }

 

支持自定义类型

//定义学生结构体类型
struct student{
    int iNo;
    QString strName;
    int score;
};

Q_DECLARE_METATYPE(student)
//结构体类型和QVariant类配合使用
    qDebug() << endl;
    student stu;
    stu.iNo=202203;
    stu.strName="sunny";
    stu.score=588;

    //使用静态方法保存数据
    QVariant qstu=QVariant::fromValue(stu);
    if(qstu.canConvert<student>()){ //判断是否可以转换操作
        student temp=qstu.value<student>();//获取数据
        student qtemp=qvariant_cast<student>(qstu);

        qDebug() << "student:iNo="<<temp.iNo<<";strName="<<temp.strName;
        qDebug() << "student:iNo="<<qtemp.iNo<<";strName="<<qtemp.strName;
    }

 

标签:QVariant,qmap,qDebug,student,类型,qt
From: https://www.cnblogs.com/baisedeyu/p/17870434.html

相关文章

  • Qt QVariant的用法
    前言QVariant这个类很神奇,或者说方便。很多时候,需要几种不同的数据类型需要传递,如果用结构体,又不大方便,容器保存的也只是一种数据类型,而QVariant则可以统统搞定。介绍......
  • Qt QVariant与Json的各种纠葛
    前言我之前虽了解QVariant的一些性能,但是没有与Json各种的互转。以前我解析Json后,是将其转化为我自定义的结构体,既方便看,又方便调用,就是解析转换的时候麻烦些;后续看到......