0

我一直在研究一个名为 RoboJournal 的基于 Qt 的 C++ 程序。它使用 Hunspell 进行拼写检查。现在,它会自动将自己的字典文件(en_US.dic)安装到用户的主文件夹(即~/.robojournal/en_US.dic)中。这在 Windows 等不提供开箱即用兼容字典的操作系统上可以正常工作,但我想解决一个设计问题:

在 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如果您设置应用程序名称和组织名称,则可以相当优雅地处理所有事情。它没有开箱即用的 hunspell 字典,但它使用的位置/路径很重要。

希望有帮助。

于 2013-03-11T22:49:00.620 回答