QVariant userType()id

时间:2012-07-25 13:09:50

标签: c++ qt

我的问题是:

How to verify QVariant of type QVariant::UserType is expected type?

具体来说,如果

struct MyType {
  ....
};

Q_DECLARE_METATYPE(MyType);

QVariant v(QVariant::fromValue(MyType());

有没有办法找出v.userType()将在编译时返回的内容?

2 个答案:

答案 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()功能。