2016-04-12 13 views
1

必要:人間が読めるか編集可能なファイルから/へ標準のQtタイプの構造体を読み書きする。QTextStreamによる逆シリアル化?

試行:Q設定。それを動作させることはかなり簡単でした。問題:QSettingsは自動的にQSettings :: sync()を定期的にdtorで呼び出します。私は設定ファイルが要求に応じて更新されることを保証する必要があり、その実行時データ構造は要求に応じて変更されます。

試行:QDataStream。問題:人が読める/編集できない。

試してみました:標準のreadlineとQString :: toInt()などを使用して、手動のシリアライズとデシリアライズ。 QSettingsがサポートする型をサポートする必要がありますが、QStringには 'toFoo()'メソッドがありません。この方法では、ずっと多くのコーディングが必要になります。

QSettingsを使用せずに人間が読めるデータをシリアル化およびデシリアライズする方法はありますか?それに関するすべてが要件に反する。ファイルの名前は異なるはずです。アクセスは異なる方法で制御されるはずです。

sync()をブロックする方法があれば、おそらく十分でしょう。私たちはおそらく他の何かを回避することができます。それは私に最も大きな問題を与える "同期"です。

+1

あなたのクラスのメンバ変数ではなく、要件に応じてコードの異なる場所で作成または削除されるローカル変数として 'QSettings'を使うことができます。 – Tarod

+0

'QTextStream'にはどんな問題がありますか? –

+0

人間が読めるようにするには、JSONを使用して独自のシリアライズを行う価値があります。ここに例があります:http://doc.qt.io/qt-5/qtcore-json-savegame-example.html –

答えて

0

QSettingsのソースコードを見てから、人が読めるシリアル化と非一意の方法でのシリアル化解除が実行されているようです。この施設はQtの他の部分には存在していないようです。また、ファイルシステムが自動的に変更される多数のポイントがあります。

これはQtでは不可能です。

関連する問題