2009-03-31 2 views
18
  • линукс: $HOME/.config
  • окна: %APPDATA%
  • Mac OS: $HOME/.config

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

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

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

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

ответ

19

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

+0

/home/user/.local/share/data// выглядит хорошо, хотя, похоже, он не является QT-специфичным. Может ли кто-нибудь из вас попробовать это на windoze и вставить результат здесь? Это было бы здорово. спасибо –

+0

В Windows XP это должно быть что-то вроде «C: \ Document and Settings \ user \ Local Settings \ Application Data» –

+0

, что я и хотел. Большое спасибо. –

0

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

+0

я хочу, чтобы хранить файлы в этом каталоге. и я уже знаю, где они находятся на каждой платформе, но есть ли qt-way для получения этой информации? –

1

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

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

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

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

0

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

QString QSettings::fileName() const 

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

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

+0

Мне не нужен домашний каталог, но каталог настроек. примеры, приведенные в вопросе. –

+0

Ответ был отредактирован после внесения изменений в вопрос. –

1

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

+0

отредактировал причину. спасибо за вашу помощь –

+0

Это потенциально мегабайты данных - это может привести к замедлению всей настройки. –

8

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

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

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

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

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

3

это работает как в Qt 4 и кварта 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 
Смежные вопросы