我的问题是指:
如何验证 QVariant::UserType 类型的 QVariant 是预期类型?
具体来说,如果
struct MyType {
....
};
Q_DECLARE_METATYPE(MyType);
QVariant v(QVariant::fromValue(MyType());
有没有办法找出v.userType()
在编译时会返回什么?
我的问题是指:
如何验证 QVariant::UserType 类型的 QVariant 是预期类型?
具体来说,如果
struct MyType {
....
};
Q_DECLARE_METATYPE(MyType);
QVariant v(QVariant::fromValue(MyType());
有没有办法找出v.userType()
在编译时会返回什么?
没有办法在编译时找到它,因为它直到运行时才确定。你可以得到它qMetaTypeId<MyType>()
。
根据我的尝试,userType()
您声明的索引将从 256 开始,然后增加 1。
因此,如果您使用Q_DECLARE_METATYPE(someType);
,则此类型将256
在userType()
调用时返回。如果你这样做Q_DECLARE_METATYPE(someOtherType);
,它将返回257
等等。
此外,如果您需要在运行时检查它,您可以获取一次值,然后将其用于比较:
int MyTypeID = QVariant::fromValue(MyType()).userType();
if( someObject.userType == MyTypeID )
{
//do stuff
}
您可能还想查看qRegisterMetaType()函数。