Qt属性系统:QVector / QMap

时间:2017-09-17 14:36:09

标签: c++ arrays qt serialization reflection

在Qt中有反射系统,我们可以将它用于基本数据类型的读/写属性。

如下所示:

int propertyStart = QObject::staticMetaObject.propertyOffset();
for (int i = propertyStart; i < MyObject::staticMetaObject.propertyCount(); ++i)
{
    QMetaProperty property = MyObject::staticMetaObject.property(i);

    QVariant value = 123;  // value to write (QVector/QMap is not supported for QVariant?)

    if (QString(property.name()) == "IntegerPropertyName")
        property.write(instance, value);

}

我的用例:我需要将网络数据(例如JSON或二进制)反序列化为某些基于QObject的类型,其数据结构由QObject(数据层次结构)中的Q_PROPERTies定义。

它可以只是基本数据类型(整数,浮点数,QString)或嵌套数据类型(其他QObjects)和容器(QVector,QSet和QMap,元素类型也可以是其他QObjects!

所以,我听说Q_DECLARE_METATYPE但不确定如何应用它。

如何用Qt实现这种类型的反序列化?

0 个答案:

没有答案