0

私は RoboJournal と呼ばれる Qt ベースの C++ プログラムに取り組んできました。スペル チェックの目的で Hunspell を使用します。現在、独自の辞書ファイル (en_US.dic) をユーザーのホーム フォルダー (つまり ~/.robojournal/en_US.dic) に自動的にインストールします。これは、すぐに使用できる互換性のある辞書を提供しない Windows などの OS ではそのままで問題なく動作しますが、修正したい設計上の問題があります。

Linux では、en_US.dic のインスタンスがいくつかあります (最も顕著なのは /usr/share/hunspell/en_US.dic にあります)。このコピーは明らかに、Hunspell を使用するすべてのプログラム間で共有されることを意図しています。独自のコピーに依存する代わりに可能です。ただし、/usr/share/hunspell/ のコピーを変更するにはスーパーユーザー権限が必要です。これは、ユーザーがそこから読み取ることができることを意味しますが、プログラムがスーパーユーザー権限で実行されていない限り、またはファイルを chmod して全員が書き込みできるようにしない限り、単語を追加することはできません。この問題により、/usr/share/hunspell/en_US.dic のコピーの有用性が大幅に低下します。

ユーザーがスーパーユーザー権限を持たずに /usr/share/hunspell/en_US.dic ファイルを変更する方法や、最初にファイルを chmod する必要がない方法はありますか? 私の Debian パッケージ管理者は、私のアプリは可能な限りグローバル システム リソースを使用するべきだと言いました。

4

1 に答える 1

1

このような状況では、通常、システムのデフォルトをロードしてから、ユーザー固有の設定ファイルをロードします。

したがって、プログラムが実行されていて、ユーザーが一部の単語を無視し、他の単語を追加するなどの場合、これをユーザーの辞書のアプリケーションデータディレクトリに保存します。

プログラムでシステム全体の変更の追加をデフォルトの辞書に保存するようにしたい場合は、ユーザーにプロンプ​​トを表示して、辞書の変更をシステムのデフォルトに保存してから、スーパーユーザーのログインまたは任意の資格情報を開く必要があります。そのファイルへの編集を保存してから保存する必要があります。

または、プログラムが最初にスーパーユーザーとして開始された場合はシステムフォルダーに保存され、それ以外の場合はユーザーのアプリケーションディレクトリに保存される場合もあります。

設定とそうでないものについて私が従うモデルは、で説明されていQSettingsます。

http://qt-project.org/doc/qt-4.8/qsettings.html#details

http://qt-project.org/doc/qt-4.8/qsettings.html#platform-specific-notes

QSettingsアプリケーション名と組織名を設定すると、すべてがかなりエレガントに処理されます。箱から出してすぐに辞書を作成することはありませんが、使用する場所/パスは重要です。

お役に立てば幸いです。

于 2013-03-11T22:49:00.620 に答える