我的问题是:
How to verify QVariant of type QVariant::UserType is expected type?
具体来说,如果
struct MyType {
....
};
Q_DECLARE_METATYPE(MyType);
QVariant v(QVariant::fromValue(MyType());
有没有办法找出v.userType()
将在编译时返回的内容?
答案 0 :(得分:3)
在编译时无法找到它,因为直到运行时才确定它。你可以使用qMetaTypeId<MyType>()
获得它。
答案 1 :(得分:1)
根据我的尝试,您声明的userType()
索引将从256开始,然后再增加一。
因此,如果您使用Q_DECLARE_METATYPE(someType);
,则此类型将在256
次调用时返回userType()
。如果您执行Q_DECLARE_METATYPE(someOtherType);
,它将返回257
,依此类推。
此外,如果您需要在运行时检查它,您可以获取一次值,然后将其用于比较:
int MyTypeID = QVariant::fromValue(MyType()).userType();
if( someObject.userType == MyTypeID )
{
//do stuff
}
您可能还想查看qRegisterMetaType()功能。