2009-04-24 10 views
3

Qtベースのアプリケーションでデータをシリアル化することを考えています。Qtでのシリアライズを強化する:それは適切な方法ですか?

私はシリアル化するつもりだ何を基本的に

から派生異なるクラスで構成されている私の階層モデルであり、たとえば、TreeModelItem:

class TreeModelItem 
{ 
protected: 
    QList<TreeModelItem *> m_children; 
//... 
}; 

私はboost::serializationを研究し、それを上に行くべきでしょうか?

私は途中でヒットすることができる隠された壁がありますか?例えば。子要素を直列化するか、カスタムのシングルスロット接続を復元するときにはどうしたらいいですか?私は専門家のアドバイスを希望します。

答えて

3

QDataStreamは、いくつかの一般的なQtオブジェクトの直列化をサポートしています。どちらかを確認できますhere。 「Qt」の方法はそれを使用することです。

しかし、あなたがブーストを使用するのを妨げるものは何もありませんが、QListのような基本的なオブジェクトのシリアル化をもう一度実装する必要があります。

TreeModelItemなどのカスタムオブジェクトがある場合は、< <という独自の演算子を指定する必要があります。

シグナル/スロットのシリアル化について:afaik Qtはこのatmをサポートしていないので、Qtチームは意図的にこのようにしています。興味があるのであれば、おそらくthisの読書が参考になるかもしれません。

+0

boostは、派生クラスの透過的な逆シリアル化を処理します。 Qtでどうすればいいですか? –

+0

透明で何を意味しますか?派生したクラスに対しても(de)シリアライズ関数を作成し、親クラス(de)をシリアライズする(間接的に)コールする必要があります。ここをクリックしてください:http://www.boost.org/doc/libs/1_38_0/libs/serialization/doc/tutorial.html#derivedclasses 同じことがQtに適用されますが、それはちょっと違って見えます。 –

+0

QStringのシリアライゼーションサポートを追加するには、ここをクリックしてください:http://flo.mueckeimnetz.de/2010/01/boostserialization-und-qstring/ – fmuecke

0

ブーストのシリアル化に興味があり、QString、QList、QStringListの実装をチェックすることができます:https://github.com/konserw/qarchive - そこから、他のQtカルセージ(フォークとPRを歓迎します! )