1

データ構造を SQL データベースに格納する必要があります。このデータは異なる可能性があるため、データベースに必要なフィールドがわかりませんでした。データ構造を XML または JSON オブジェクトにエンコードしてから、それを SQL データベースに入れようとしています。しかし、それはうまくいかなかったので、問題はその構造のエンコードに関するものであるため、シリアライゼーションが必要です。

データ構造をテキストにシリアライズ/デシリアライズするには、どのライブラリ/ツール/メソッドを使用できますか? いくつかの整数、いくつかの Unicode 文字列、およびいくつかのブール値で構成されるデータ構造を考えてみましょう。

よろしくお願いします!

4

3 に答える 3

4

データベース内のこのデータをどうしますか? 別のプログラムまたは言語で使用する場合は、データが読み取り可能である必要があり、QXmlStreamWriter/Reader または QJsonDocument (両方とも QByteArray を使用) を使用できます。

プログラムの外部でデータを使用したくない場合は、QDataStream を使用して QByteArray に書き込むことができます。

以下のコードのようなものになります。

QByteArray data;
QDataStream stream(&data);
stream << yourClasses;
sqlQuery.bindValue(data);

シリアライズしたいクラスにストリーム演算子を追加するだけです:

QDataStream &operator<<(QDataStream &, A const&);
QDataStream &operator>>(QDataStream &, A &);
于 2013-10-04T17:18:02.130 に答える
3

これは長く詳細な回答ですが、要点は次のとおりです。Qt 5.2 には、シリアライゼーションとデシリアライゼーションも行っている「SaveGame」の例に基づいて、Qt でこれらすべてを達成する方法の例があります。基本的に、プレイできないゲームキャラクターに対してそれを行っています。QSaveFileまた、情報を目的のファイルに安全に保存するためにも使用しています。ここでは、便宜上、例のドキュメントへの URL を見つけることができます。

http://doc-snapshot.qt-project.org/qdoc/qtcore-savegame-example.html

Qt5のjsonパーサーを使用して、数日前にこの問題を解決しました。次のクラスを検討することをお勧めします。

Qt 4 を使用する予定の場合はQJson、たとえばライブラリを使用する必要がありますが、パフォーマンスに基づいて Qt 5 json パーサーよりもかなり遅いことに注意してください。ここで Thiago のベンチマークを見つけることができます。

https://plus.google.com/108138837678270193032/posts/7EVTACgwtxK

json 形式は、必要に応じて文字列、整数、およびブール値をサポートしているため、うまくいくはずです。ここでは、そのような型をシリアル化および逆シリアル化する方法の署名を見つけることができます。

シリアライズ

bool    toBool(bool defaultValue = false) const
double  toDouble(double defaultValue = 0) const
QString toString(const QString & defaultValue = QString()) const

逆シリアル化

QJsonValue(bool b)
QJsonValue(double n)
QJsonValue(const QString & s)

ここでは、Qt 5 での json サポートに関する概要ページを見つけることができます。

http://doc-snapshot.qt-project.org/qt5-nosubdir/json.html

Qt 5 の json は非常に効率的なバイナリ表現として内部的に保存されるため、基本的にテキスト表現ではなくそれを使用することもできます。それはあなたの正確なシナリオに依存します。実際、Qt 4 の場合、これらのクラスは Qt 5 と密接に結びついているため、必要に応じてこれらのクラスをバックポートすることもできます。Qt 4 で苦労していた BlackBerry 開発では実際にそうであったかもしれません。 Qt。

于 2013-10-04T19:39:30.853 に答える