4

オブジェクトをディスク上でシリアル化しようとすると問題が発生します。これは単純化されたシナリオです。

独自のシリアル化演算子を提供する ObjectA があります。データをファイルに保存/ロードできるため、機能します。次に、データ メンバーとして ObjectA を含む ObjectB があります。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 シリアライゼーションの実装にあると思いますが、どうすればよいかわかりません。

4

1 に答える 1