QVariant的使用

关于QVariant的使用,主要从三个方面进行说明

1、QVariant支持的类型,如,int, float, QString等

    QVariant var=12;
    int data=var.toInt();

2、自定义类型,这个时候就要用到Qt的元对象系统。

  • Adding a Q_DECLARE_METATYPE() makes the type known to all template based functions, including QVariant

      struct MyClass{
          int id;
          QString name;
      };
      Q_DECLARE_METATYPE(MyClass)
    
  • 使用自定义类型

      //存储数据
          MyClass myClass;
          myClass.id=0;
          myClass.name=QString("LiMing");
       
          data[0]=QString("ddd");
          data[1]=123;
          data[3]=QVariant::fromValue(myClass);
       
       
      //获取数据
          QString str=data.value(0).toString();
          int val=data.value(1).toInt();
       
          if(data[3].canConvert<MyClass>())
          {
              MyClass myClass=data[3].value<MyClass>();
              int id=myClass.id;
              QString name=myClass.name;
          }
    

3、QVariant保存指针,有两种写法

  • 第一种
//保存
QVariant var=QVariant::fromValue((void*)event);
    
//获取
QPaintEvent* e=(QPaintEvent*)var.value<void*>();
  • 第二种用法,不常用

      QObject* obj=new QObject;
      obj->setObjectName("myObj");
    
      //保存
      QVariant var=QVariant(QMetaType::QObjectStar,&obj);
    
      //提取
      QObject* myobj=qvariant_cast<QObject*>(var);
      if(myobj!=NULL)
          qDebug()<<myobj->objectName();
    
      obj->deleteLater();
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值