自定义类型与QVariant之间的转换
struct ContactInfo{ QString phoneNumber; //电话号码 QString name; //姓名 int type;//类型 :0--白名单,1--黑名单 ContactInfo() //注意1 { phoneNumber=""; name=""; type=0; } ContactInfo(const ContactInfo& info) //注意2 { phoneNumber=info.phoneNumber; name=info.name; type=info.type; } ContactInfo& operator =(const ContactInfo& info) { phoneNumber=info.phoneNumber; name=info.name; type=info.type; return *this; } bool operator !=(ContactInfo info) { if(phoneNumber!=info.phoneNumber || name!=info.name || type!=info.type) return true; else return false; } bool operator ==(ContactInfo info) { if(phoneNumber!=info.phoneNumber|| name!=info.name || type!=info.type) return false; else return true; } }; Q_DECLARE_METATYPE(ContactInfo); //注意3
转换方法:
SMSInfo smsInfo;
QVariant value; value.setValue(smsInfo);
QVariant v; v=.............; SMSInfo info=v.value<SMSInfo>();
注意:
默认情况下,Qt不会自动为你进行强制类型转换,如果你要使你的类与QVariant进行转换,你必须的类的定义后加上Q_DECLARE_METATYPE宏,如Q_DECLARE_METATYPE(MyClass)。
另外很重要的一点是,使用这个宏的类一定要有默认的构造和析构函数,还有拷贝复制函数。

浙公网安备 33010602011771号