5


0

選択する設定の保存形式は?

私はQtアプリケーションを書いていますが、プログラムの設定を保存する必要があります。 上級ユーザーでも簡単に編集でき、しかも上級ユーザーには十分な柔軟性があるようにしたい(したがって、他のプログラム、スクリプトなどを使用して簡単に自動編集できる)。 QSettingsには、Windows用のレジストリであるネイティブ形式と、他のほとんどのプラットフォーム用のネイティブであるINI形式の2つの形式があります。 INIは問題ありませんが、そこに@QString(…​)または他のQtを表示することは実際には読みにくく、エラーが発生しやすいです。

レジストリも素晴らしいものではありません。 それは台無しになるように設計されていないため、編集や高度な使用にはまったく適していません。スレッドと複数のQSettingsオブジェクト間の同期の問題を解決します(したがって、すべてを消去するわけではありませんが、読み取り/書き込みロッカーで保護されたグローバルオブジェクトを1つだけ使用できます)。 私はXMLを見ていますが、それはかなり冗長であり、QSettings形式(実際には問題ではありません)を書く必要がありますが、非常に柔軟です。

XMLに代わる他の方法が存在することは知っていますが、実際にはそれらに精通していません。私は確かに、パーサーを書きたくありません。基本的なものではなく、自分自身の最終的なフォーマットの例外です。

更新-注: QSettingsをまったくバイパスせず、そのためのフォーマットを書き込むだけです。これは、静的関数に渡された2つの関数ポインター(読み取り関数と書き込み関数)のように見えます。私のフォーマットを使用できます。

  • Update 2:*また、通常GUIを持たないLinuxサーバーも心配です。 マネージャーを使用せずに、nanoなどを介してサーバーから簡単に構成を編集できるようにしたい(そう、デーモンサーバーとリモートGUIマネージャーが必要です)。

4 Answer


3


これを達成するためにhttp://doc.trolltech.com/4.5/qsettings.html[QSettings]クラスを使うことができます。 これは、次回起動時に設定を取得するために、アプリケーションがその設定を保存できるようにする抽象クラスです。

設定を保存する:

QSettings settings("ValueName",  "Value");

設定を読む:

QString v = settings.value("ValueName");


1


まず、.iniファイルを介してQSettingsを実行し、多くの問題が発生するかどうかを確認します。 問題がなければ、XMLソリューションに行く必要はありません。 XMLソリューションが必要になった場合は、(前述のように)QSettingsオブジェクトのフォーマッターを追加できます。


1


何らかの理由で「QSettings」をバイパスして設定ファイルのXMLを検討することになった場合、利用可能なライブラリの好みに応じてJSONまたはYASTを確認することをお勧めします。

補足として、ユーザーにファイルを手動で編集させるつもりがない場合は、最も簡単なものを選択して( QSettings?)、あなたの人生を進めてください。 (har har)。


0


冗長性を調べるもう1つの方法は、コンテンツの堅牢性です。 何らかの理由(ディスクにアルファ粒子が衝突し、1ビットが反転する場合)でも、そこに行って必要なエラー修正を行うことができます…​ 利点があるだけでなく、それに伴うコストもあります…​ バイナリファイルでは、シングルビットエラーはデータが完全に失われることを意味します