2009-12-01 8 views
5

私はQtアプリケーションを作成しており、プログラムの設定を保存する必要があります。私はそれらを上級ユーザー以外でも簡単に編集できるようにしたいが、上級ユーザーには十分な柔軟性があるようにする(他のプログラムやスクリプトなどを使って簡単に自動編集できるようにする)。 QSettingsには、Windowsのレジストリのネイティブ形式と他のほとんどのプラットフォームのINI形式の2つの形式があります。 INIは問題ありませんが、@ QString(...)やその他のQtの情報は本当に読みにくく、エラーが起こりやすいです。選択する設定の保存形式は何ですか?

レジストリはあまり良くありません。それは混乱するように設計されておらず、編集や高度な使い方にはまったく適していませんでした。スレッドと複数のQSettingsオブジェクト間での同期の問題を解決します(読み書きロックで保護された1つのグローバルオブジェクトを使用することはできますが、すべてを一掃するわけではありません)。私はXMLを見ていますが、冗長であり、QSettingsフォーマット(実際には問題ではありません)を書く必要がありますが、非常に柔軟です。

私はXMLの他の選択肢が存在することを知っていますが、私はそれらに精通していません。私は確かにパーサーを書いてはいけません。基本的なものではなく、自分の最終的なフォーマットの例外です。

アップデート - ノート:私はQSettingsをバイパスしません。ちょうど2つの関数ポインタ(読み込みと書き込みの関数)が静的に渡されたようです私のフォーマットを使用することができます。

更新2:私はまた、通常はGUIを持っていないLinuxサーバについて心配しています。私は人々がサーバからナノなどを介して簡単に構成を編集できるようにしたいと思います。マネージャー(はい、私はデーモンサーバーとリモートGUIマネージャーを持っています)。

答えて

1

あなたがQSettingsをバイパスして、設定ファイルのXMLを考慮し終わる何らかの理由で、私はあなたがJSONまたはYASTを見に行くお勧めしている場合利用可能なライブラリの使い方によって異なります。

ユーザーが手動でファイルを編集しないようにするには、フォーマットの選択が問題ではないので、あなたにとって最も簡単なもの(QSettings?)を選択してください。シングルビット(har har)。

+0

私はそれらを見て、QSettingsフォーマット私はeiherを選ぶ。 コンピュータ間を移動するときは問題ありません。ファイルは、ファイルをコピーするのと同じくらい簡単です。レジストリキーをファイルにエクスポートしてインポートする必要があります。そして、新しいregeditで作成された.regファイルを与えると、regeditが文句を言うかもしれません。 – CMircea

0

冗長性を調べる別の方法は、コンテンツの堅牢性です。何らかの理由で(アルファ粒子がディスクに衝撃を与えて、シングルビットを反転させる)、あなたはまだそこに行って必要なエラー訂正をすることができます...利点がありますが、それに関連するコストも...バイナリファイルの場合、単一ビットエラーはデータが完全に失われていることを意味します。

+1

これは本当ですが、この場合はおそらくポイントの横にあります。私は間違いなく文書や作業項目などのデータの不正な腐敗や手動復旧について心配していますが、これはおそらく設定保管の大きな問題ではないでしょう。 –

+0

設定の問題はあまりありません。ユーザーが手動でファイルを編集して構造を破るだけですが、それは簡単に確認でき、修正(単純に削除/無視)することもできます。 – CMircea

1

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

3

これを達成するにはQSettingsクラスを使用できます。これは抽象クラスで、次回の起動時にアプリケーションを取得するためにアプリケーションに設定を保存させます。

保存設定:

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

読むの設定:

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

もう一度私の質問をお読みください。私はそれを知っているし、QSettingsを使用しますが、私は基本的なフォーマットが心配です。 QSettingsは、INI形式とWindowsレジストリ形式を提供します。 – CMircea

+0

QSettingsは、OSに関する「標準」ストレージ形式を使用しています。だから私は抽象化について語った。このクラスを使用すると、各システムの標準フォーマットを同じでなくても使用できます。 Qtがあなたのアプリの値を保存する方法です。あなたは複雑なオブジェクトを保存しない限り、自分でそれを行う必要はありません。この場合、私はXMLがより良い方法だと思います。 –

+1

OPは彼のアプリのユーザーが設定を簡単に編集することを望んでいると言っていますが、彼は簡単に設定を保存したいとは思いません(すでに彼ですから) – blwy10

関連する問題