Подтвердить что ты не робот

Qt4.4 как получить путь пользовательских настроек

  • linux: $HOME/.config
  • окна: %APPDATA%
  • mac os: $HOME/.config

Он может быть установлен с помощью http://qt-project.org/doc/qt-4.8/qsettings.html#setPath, но кажется, что я не могу его получить.

http://qt-project.org/doc/qt-4.8/qlibraryinfo.html#location QLibraryInfo::LibrariesPath возвращает каталог настроек системы, который не является тем, что я хочу.

Любые идеи, или я должен их кодировать отдельно для каждой платформы?

€: Я хочу создать подкаталог и хранить в нем файлы. (Вы можете наказать меня, если это плохая идея)

4b9b3361

Ответ 1

Это может не ответить на ваш вопрос напрямую: если вы хотите хранить постоянные данные для каждого пользователя, не следует ли использовать QDesktopServices:: storageLocation (QDesktopServices:: DataLocation) вместо этого?

Ответ 2

Это неприятное обходное решение. Сначала вы создаете QSettings, затем получите его местоположение.

QSettings cfg(QSettings::IniFormat, QSettings::UserScope,
       "organization", "application");

QString config_dir = QFileInfo(cfg.fileName()).absolutePath() + "/";

Кредиты идут на форум Qt Center.

QSettings хранит конфигурацию по умолчанию в каталоге пользователя AppData. См. Документацию для QSettings. Также этот код инструктирует хранить конфигурацию в формате Ini.

Ответ 3

это работает как на qt 4, так и на qt 5

QApplication::setApplicationName("MyApp");
QApplication::setOrganizationName("Me");

QString homePath;

#if QT_VERSION >= 0x050000
    homePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
#else
    homePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
#endif

Ответ 4

Насколько я могу судить, вы не можете получить путь. В источнике Qt src/corelib/io/qsettings.cpp существует функция для получения пути:

static QString getPath(QSettings::Format format, QSettings::Scope scope)
{
    ...

но он недоступен из кода с использованием Qt. Вы не можете скопировать его и использовать его, потому что он использует внутренние глобальные Qt для хранения пути...

EDIT: решение было опубликовано с помощью QDesktopServices.storageLocation(QDesktopServices.DataLocation), но оно не делает именно то, что задавал вопрос, т.е. если я устанавливаю настраиваемый путь с помощью QSettings.setPath(), он не отражает изменения.

Ответ 5

Зачем вам нужно знать путь к настройкам? Если вы собираетесь установить в него настройки, вы можете использовать QSettings. Я мог видеть создание подкаталога для хранения различных настроек, но, похоже, самым простым способом было бы использовать QSettings напрямую.

Ответ 6

На какой платформе вы находитесь?
Может быть связано или нет, но в окнах по умолчанию используется запись QSettings в реестр.

Ответ 7

Я прочитал больше в вопросе, чем был, поскольку он был первоначально опубликован. Это понятно после редактирования. Хорошо, так что вы не можете использовать.

QString QSettings::fileName () const

Возвращает путь, в котором записываются настройки с использованием этого объекта QSettings.

В Windows, если формат QSettings::NativeFormat, возвращаемое значение - это путь к системному реестру, а не путь к файлу.