0

我的问题是指:

如何验证 QVariant::UserType 类型的 QVariant 是预期类型?

具体来说,如果

struct MyType {
  ....
};

Q_DECLARE_METATYPE(MyType);

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

有没有办法找出v.userType()在编译时会返回什么?

4

2 回答 2

3

没有办法在编译时找到它,因为它直到运行时才确定。你可以得到它qMetaTypeId<MyType>()

于 2012-07-26T08:46:26.437 回答
1

根据我的尝试,userType()您声明的索引将从 256 开始,然后增加 1。

因此,如果您使用Q_DECLARE_METATYPE(someType);,则此类型将256userType()调用时返回。如果你这样做Q_DECLARE_METATYPE(someOtherType);,它将返回257等等。

此外,如果您需要在运行时检查它,您可以获取一次值,然后将其用于比较:

int MyTypeID = QVariant::fromValue(MyType()).userType(); 
if( someObject.userType == MyTypeID )
{
//do stuff
}

您可能还想查看qRegisterMetaType()函数。

于 2012-07-25T13:53:36.470 回答