自定义对象如果需要赋值给QVariant对象,那么需要使用Q_DECLARE_METATYPE标记
在set和get的过程中有拷贝构造的过程
#ifndef __MY_OBJECT_H_
#define __MY_OBJECT_H_
#include <QObject>
class MyObject
{
public:
MyObject()
{
}
MyObject(const MyObject& object)
{
this->age = object.age;
this->name = object.name;
}
~MyObject()
{
}
int age;
QString name;
};
Q_DECLARE_METATYPE(MyObject)
#endif
set的时候有拷贝构造
MyObject myObject;
myObject.age = 20;
myObject.name = "lili";
QVariant variant;
variant.setValue(myObject);//此处会发生拷贝构造
get的时候也会有拷贝构造
MyObject myObject = variant.value<MyObject>();//此处会发生拷贝构造
qDebug()<<(QString(" %1 %2 ").arg(myObject.age).arg(myObject.name));
同一个QVariant如果set两次,第二次会把第一次拷贝构造出来的对象delete掉
MyObject myObject;
myObject.age = 20;
myObject.name = "lili";
QVariant variant;
variant.setValue(myObject);//此处会发生拷贝构造
//variant作为对象变量保存起来
下次再次执行
MyObject myObject;
myObject.age = 20;
myObject.name = "lili";
QVariant variant;
variant.setValue(myObject);//此处会发生拷贝构造,并且将第一次拷贝构造的对象析构掉
//variant作为对象变量保存起来