【问题标题】:Working with system-level dictionaries使用系统级词典
【发布时间】:2013-03-11 19:17:30
【问题描述】:

我一直在开发一个名为 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 软件包维护者说我的应用应该尽可能使用全局系统资源。

【问题讨论】:

    标签: c++ qt hunspell


    【解决方案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 字典,但它使用的位置/路径很重要。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2010-11-14
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多