簡體   English   中英

如何序列化自定義對象

[英]How to serialize custom objects

我在嘗試在磁盤上序列化我的對象時遇到問題。 這是一個簡化的場景:

我有 ObjectA 提供它自己的序列化操作符。 它們可以工作,因為我可以將數據保存/加載到文件中。 接下來,我將 ObjectB 包含 ObjectA 作為數據成員。 嘗試保存 ObjectB 時出現運行時錯誤:

QVariant::save: 無法保存類型 279。

我將此代碼用於流運算符:

QDataStream & operator<<( QDataStream & dataStream, const ObjectA & objectA )
{
    for(int i=0; i< objectA.metaObject()->propertyCount(); ++i) {
        if(objectA.metaObject()->property(i).isStored(&objectA)) {
            dataStream << objectA.metaObject()->property(i).read(&objectA);
        }
    }
    return dataStream;
}

QDataStream & operator>>(QDataStream & dataStream, ObjectA & objectA) {
    QVariant var;
    for(int i=0; i < objectA.metaObject()->propertyCount(); ++i) {
        if(objectA.metaObject()->property(i).isStored(&objectA)) {
            dataStream >> var;
            objectA.metaObject()->property(i).write(&objectA, var);
        }
    }

    return dataStream;
}

(只需將 ObjectB 運算符的 A 替換為 B)

我認為錯誤出在 ObjectB 序列化實現中,但我不知道如何進行。

您必須在您的類型上使用qRegisterMetaTypeStreamOperators 例如:

class MyType {
  ...
};
Q_REGISTER_METATYPE(MyType);

int main(int argc, char ** argv) {
  ...
  qRegisterMetaTypeStreamOperators<MyType>();
  ...
}

在 Qt 6 中不再需要它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM