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

后端 未结 1 1964
伪装坚强ぢ
伪装坚强ぢ 2020-12-20 16:10

I\'m writing testing code that will automatically iterate thru all Q_PROPERTY\'s of widgets and some properties are using types that are registered via qRegisterMetaType. If

相关标签:
1条回答
  • 2020-12-20 16:54

    For user defined types there is QVariant::userType(). It works like QVariant::type() but returns the type id integer of the user defined type whereas QVariant::type() always return QVariant::UserType.

    There is also QVariant::typeName() which returns the name of the type as a string.

    EDIT :

    It probably depends on how you set the QVariant. Directly using QVariant::QVariant(int type, const void * copy) is discouraged.

    Say I have three types like this :

    class MyFirstType
    { 
        public:
            MyFirstType();
            MyFirstType(const MyFirstType &other);
            ~MyFirstType();
    
            MyFirstType(const QString &content);
    
            QString content() const;
    
        private:
            QString m_content;
    };
    Q_DECLARE_METATYPE(MyFirstType);
    

    The third without Q_DECLARE_METATYPE

    I store them in QVariant :

     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();
    
     [...]
    

    I get :

    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 
    
    0 讨论(0)
提交回复
热议问题