Ответ 1
Это может не ответить на ваш вопрос напрямую: если вы хотите хранить постоянные данные для каждого пользователя, не следует ли использовать QDesktopServices:: storageLocation (QDesktopServices:: DataLocation) вместо этого?
$HOME/.config
%APPDATA%
$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
возвращает каталог настроек системы, который не является тем, что я хочу.
Любые идеи, или я должен их кодировать отдельно для каждой платформы?
€: Я хочу создать подкаталог и хранить в нем файлы. (Вы можете наказать меня, если это плохая идея)
Это может не ответить на ваш вопрос напрямую: если вы хотите хранить постоянные данные для каждого пользователя, не следует ли использовать QDesktopServices:: storageLocation (QDesktopServices:: DataLocation) вместо этого?
Это неприятное обходное решение. Сначала вы создаете QSettings
, затем получите его местоположение.
QSettings cfg(QSettings::IniFormat, QSettings::UserScope,
"organization", "application");
QString config_dir = QFileInfo(cfg.fileName()).absolutePath() + "/";
Кредиты идут на форум Qt Center.
QSettings
хранит конфигурацию по умолчанию в каталоге пользователя AppData. См. Документацию для QSettings
. Также этот код инструктирует хранить конфигурацию в формате Ini.
это работает как на 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
Насколько я могу судить, вы не можете получить путь. В источнике Qt src/corelib/io/qsettings.cpp
существует функция для получения пути:
static QString getPath(QSettings::Format format, QSettings::Scope scope)
{
...
но он недоступен из кода с использованием Qt. Вы не можете скопировать его и использовать его, потому что он использует внутренние глобальные Qt для хранения пути...
EDIT: решение было опубликовано с помощью QDesktopServices.storageLocation(QDesktopServices.DataLocation)
, но оно не делает именно то, что задавал вопрос, т.е. если я устанавливаю настраиваемый путь с помощью QSettings.setPath()
, он не отражает изменения.
Зачем вам нужно знать путь к настройкам? Если вы собираетесь установить в него настройки, вы можете использовать QSettings
. Я мог видеть создание подкаталога для хранения различных настроек, но, похоже, самым простым способом было бы использовать QSettings
напрямую.
На какой платформе вы находитесь?
Может быть связано или нет, но в окнах по умолчанию используется запись QSettings в реестр.
Я прочитал больше в вопросе, чем был, поскольку он был первоначально опубликован. Это понятно после редактирования. Хорошо, так что вы не можете использовать.
QString QSettings::fileName () const
Возвращает путь, в котором записываются настройки с использованием этого объекта QSettings
.
В Windows, если формат QSettings::NativeFormat
, возвращаемое значение - это путь к системному реестру, а не путь к файлу.