首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证类型为QVariant::UserType的QVariant是否为预期类型?

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

Stack Overflow用户
提问于 2010-07-07 16:54:51
回答 1查看 20.1K关注 0票数 8

我正在编写测试代码,它将自动迭代小部件的所有Q_PROPERTY,一些属性使用通过qRegisterMetaType注册的类型。如果我想要将它们读/写到QVariant中,我需要在将它们存储到variant中时使用QVariant::UserType。到目前一切尚好。

但是当我想测试这些属性的读取和写入时,我还需要知道它们的类型。对于已经是标准qt类型的东西,我可以通过QVariant::type()来实现,但是由于我有很多的用户类型,如何才能做到这一点呢?

从QVariant的应用程序接口中,我发现了以下内容:

bool QVariant::canConvert ( Type t ) const

但我有点怀疑这是否会在枚举的情况下导致错误类型?

那么,要验证QVariant中存储了哪种类型的用户类型,最简单的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-07 23:53:19

对于用户定义的类型,有QVariant::userType()。它类似于QVariant:: type (),但返回用户定义类型的类型id整数,而QVariant:: type ()总是返回QVariant::UserType。

还有QVariant::typeName(),它以字符串形式返回类型的名称。

编辑:

这可能取决于您如何设置QVariant。不鼓励直接使用QVariant::QVariant(int type, const void * copy)

假设我有三种类型,如下所示:

代码语言:javascript
复制
class MyFirstType
{ 
    public:
        MyFirstType();
        MyFirstType(const MyFirstType &other);
        ~MyFirstType();

        MyFirstType(const QString &content);

        QString content() const;

    private:
        QString m_content;
};
Q_DECLARE_METATYPE(MyFirstType);

第三个没有Q_DECLARE_METATYPE

我将它们存储在QVariant中:

代码语言:javascript
复制
 QString content = "Test";

 MyFirstType first(content);

 MySecondType second(content);

 MyThirdType third(content);

 QVariant firstVariant;
 firstVariant.setValue(first);

 QVariant secondVariant = QVariant::fromValue(second);

 int myType = qRegisterMetaType<MyThirdType>("MyThirdType");

 QVariant thirdVariant(myType, &third); // Here the type isn't checked against the data passed

 qDebug() << "typeName for first :" << firstVariant.typeName();
 qDebug() << "UserType :" << firstVariant.userType();
 qDebug() << "Type : " << firstVariant.type();

 [...]

我得到了:

代码语言:javascript
复制
typeName for first : MyFirstType 
UserType : 256 
Type :  QVariant::UserType 

typeName for second : MySecondType 
UserType : 257 
Type :  QVariant::UserType 

typeName for third : MyThirdType 
UserType : 258 
Type :  QVariant::UserType 
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3193275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档