Я работал над программой C ++ на основе Qt, которая называется RoboJournal. Он использует Hunspell для проверки правописания. Прямо сейчас он автоматически устанавливает свои собственные файлы словарей (en_US.dic) в домашнюю папку пользователя (т.е. ~ / .robojournal / en_US.dic). Это отлично работает как есть на ОС, таких как Windows, которые не предоставляют совместимых словарей из коробки, но есть проблема дизайна, которую я хочу исправить:
В Linux есть несколько экземпляров en_US.dic (в частности, в /usr/share/hunspell/en_US.dic). Эта копия, очевидно, предназначена для совместного использования всеми программами, которые используют Hunspell, что означает, что моя программа должна использовать ее, если возможно вместо того, чтобы полагаться на свою собственную копию. Однако копия в / usr / share / hunspell / требует прав суперпользователя для изменения; в то время как это означает, что пользователи могут читать из него, они не могут добавлять слова в него, если программа не работает с разрешениями суперпользователя или если я не изменю файл, чтобы позволить всем писать в него. Эта проблема делает копию /usr/share/hunspell/en_US.dic гораздо менее полезной.
Есть ли способ для пользователей изменить файл /usr/share/hunspell/en_US.dic без иметь права суперпользователя или требовать от них сначала chmod файла? Мой сопровождающий пакета Debian сказал, что мое приложение должно по возможности использовать глобальные системные ресурсы.
В подобных ситуациях обычно вы загружаете системные значения по умолчанию, а затем загружаете файл пользовательских настроек.
Поэтому, когда ваша программа запущена, и пользователь игнорирует некоторые слова, добавляет другие и т. Д., Вы сохраняете это в словаре пользователя в каталоге данных своего приложения.
Если вы действительно хотите, чтобы ваша программа сохраняла дополнения к общесистемным изменениям в словаре по умолчанию, вы должны указать пользователю, хотят ли они сохранить изменения словаря в системных значениях по умолчанию, а затем открыть логин суперпользователя или любые учетные данные, которые вы хотите сделать. необходимо сохранить изменения в этот файл, а затем сохранить его.
Или даже может быть, если программа изначально запускалась как суперпользователь, а затем сохраняет ее в системной папке, в противном случае она сохраняет ее в каталоге приложения пользователя.
Модель, которой я следую за настройками, а что нет, объясняется в 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
обрабатывает все довольно элегантно, если вы установите название приложения и название организации. Он не использует словари из коробки, но используемые им места / пути имеют большое значение.
Надеюсь, это поможет.
Других решений пока нет …