我正在编写测试代码,它将自动遍历所有Q_PROPERTY的小部件,并且一些属性正在使用通过qRegisterMetaType注册的类型.如果我想将它们读/写到QVariant中,我需要在将它们存储到变体中时使用QVariant :: UserType.到现在为止还挺好.
但是当我想测试这些属性的读写时,我还需要知道它们的类型.对于已经是标准qt类型的东西,我可以通过QVariant :: type()来做到这一点,但由于我有很多usertypes,这将如何实现?
从QVariant的api,我发现了这个:
bool QVariant::canConvert ( Type t ) const
但我有点怀疑这是否会导致错误类型的枚举?
那么,验证QVariant中存储哪种类型的usertype是多么简单的方法呢?
Lei*_*iaz 14
对于用户定义的类型,有QVariant :: userType().它的工作方式类似于QVariant :: type(),但返回用户定义类型的类型id整数,而QVariant :: type()始终返回QVariant :: UserType.
还有QVariant :: typeName(),它将类型的名称作为字符串返回.
编辑:
这可能取决于您如何设置QVariant.不鼓励直接使用QVariant :: QVariant(int type,const void*copy).
说我有三种类型:
class MyFirstType
{
public:
MyFirstType();
MyFirstType(const MyFirstType &other);
~MyFirstType();
MyFirstType(const QString &content);
QString content() const;
private:
QString m_content;
};
Q_DECLARE_METATYPE(MyFirstType);
Run Code Online (Sandbox Code Playgroud)
第三个没有Q_DECLARE_METATYPE
我将它们存储在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();
[...]
Run Code Online (Sandbox Code Playgroud)
我明白了:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15868 次 |
最近记录: |