关于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();