自定义类型与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)。

另外很重要的一点是,使用这个宏的类一定要有默认的构造和析构函数,还有拷贝复制函数。




posted @ 2012-06-17 22:22  阿洒  阅读(1156)  评论(0)    收藏  举报