QVariant支持大部分常见的Qt数据类型互转,比如:
this->setProperty("number", 1);
int number = this->property("number").toInt();
除了基本的数据类型外,还可以使用Q_DECLARE_METATYPE()来向Qt的元系统声明自定义类型,比如说struct
struct MemberInfo
{
QString userName;
QString userID;
QString address;
};
Q_DECLARE_METATYPE(MemberInfo)
在使用QVariant传递自定义数据类型时,需要调用QVariant的setValue或fromValue方法,其中fromValue是静态方法
QVariant var;
var.setValue(info); // info是自定义数据类型
// 或
QVariant var = QVariant::fromValue(info);
取值的时候,不能使用toInt()、toString()等内建的方法, 需要用模版形式
if(var.canConvert<MemberInfo>())
{
MemberInfo info = var.value<MemberInfo>();
qDebug()<<info.userName;
qDebug()<<info.userID;
qDebug()<<info.address;
}
完整代码如下所示