QSettings IniFormat попадает в реестр

Я сохраняю данные приложения в файле Ini. Вот как:

QSettings IniFile(K_COMPNAME,K_INIFILENAME);
QSettings::setDefaultFormat(QSettings::IniFormat);
IniFile.setValue("Location",loc);
IniFile.setValue("BaudRate",baud);
IniFile.sync();

K_INIFILENAME — это константа «Настройки».

Я бы ожидал, что Settings.ini находится в той же папке, что и мой exe. Но нет. Вместо этого это сохраняется в реестре. Потому что, когда я делаю qDebug() << IniFile.fileName();, он возвращает:

"\HKEY_CURRENT_USER\Программное обеспечение\Моя компания\Настройки"

Мой вопрос, почему это так, и как сделать, чтобы это сохранялось в файле Ini.


person GeneCode    schedule 18.04.2018    source источник
comment
Вероятно, вас заминусовали, потому что вы не читали документацию перед публикацией вопроса. Это мое предположение. Кстати, вы неправильно используете конструктор QSettings - нет такого конструктора, который получает название компании и имя файла. В вашем случае Qt рассматривает K_INIFILENAME как имя приложения.   -  person vahancho    schedule 18.04.2018
comment
Я читал документацию. Но я так этого и не понял. Может быть, им нужно улучшить формат документации, чтобы ее было легче понять на четких примерах? Я не знаю.   -  person GeneCode    schedule 19.04.2018
comment
А также, если ответ на все вопросы о стековом потоке читается в документации, то можно вообще удалить стековый поток. Причина, по которой люди обычно спрашивают в SO, заключается в том, что они ПРОЧИТАЛИ документацию, попробовали ее неправильно (потому что они неправильно поняли или что-то в этом роде). Это забавное сообщество Qt. Если вы не желаете помочь, просто ничего не отвечайте и дайте ответить тем, кто готов помочь.   -  person GeneCode    schedule 19.04.2018
comment
Пожалуйста, успокойтесь. Здесь все хотят помочь решить проблемы. Я надеюсь, что это так. Однако, когда кто-то не видит никаких усилий - это может быть поводом для минуса. Вы можете прочитать длинную дискуссию по этой теме здесь: оправданно ли отрицать вопрос">meta.stackoverflow.com/questions/252677/ .   -  person vahancho    schedule 19.04.2018
comment
Это только одно обсуждение. Что не делает его законом. Я всегда придерживаюсь позиции, что если вы не хотите помочь, просто уходите. Это простая концепция, которую люди должны усвоить. Я не злоупотребляю форумом. Я не спрашиваю глупостей. Я законно прошу помощи / руководства. Если вы чувствуете, что это слишком просто для ваших могущественных знаний, просто уходите!   -  person GeneCode    schedule 19.04.2018
comment
То есть вы не принимаете тот факт, что у других может быть другое мнение по вашему вопросу? Голосование против не означает, что на ваши вопросы не следует отвечать. Это просто показатель того, насколько хорош и полезен вопрос. Вот для чего нужна кнопка «против» и как работает это сообщество. Наконец, если вы думаете, что я проголосовал за вас - это не так. Я просто попытался ответить на ваш вопрос и объяснить вещи.   -  person vahancho    schedule 19.04.2018
comment
Понижение означает, что у моего вопроса меньше шансов получить ответ! Потому что, когда вы минусуете, люди с меньшей вероятностью нажимают на него, хотя на самом деле с этим нет проблем. Я и не говорил, что ты минусовал меня. Вы предположили это.   -  person GeneCode    schedule 20.04.2018


Ответы (2)


имейте в виду, что с конструктором:

QSettings IniFile(K_COMPNAME,K_INIFILENAME);

Создает объект QSettings для доступа к настройкам приложения с именем application из организации с именем organization,

Для области задано значение QSettings::UserScope, а для формата задано значение QSettings::NativeFormat (т. е. вызов setDefaultFormat() перед вызовом этого конструктора не имеет никакого эффекта).

Это означает, что это допустимый конструктор реестра (под окнами). Правильным подходом для формата INI будет:

QCoreApplication::setOrganizationName(K_COMPNAME);
QCoreApplication::setApplicationName(K_INIFILENAME);
QSettings::setDefaultFormat(QSettings::IniFormat);
QSettings IniFile;

Приведенный выше код будет использовать формат INI, а настройки хранятся в FOLDERID_RoamingAppData.

Например: FOLDERID_RoamingAppData\<K_COMPNAME>\<K_INIFILENAME>

теперь есть только один другой конструктор для хранения в локальном файле INI (settings.ini) следующим образом:

QSettings IniFile(K_INIFILENAME,QSettings::IniFormat);
person Mohammad Kanan    schedule 18.04.2018
comment
Я хотел бы сказать большое спасибо за ваше время, чтобы помочь и вести меня в этой теме. Добрый день, сэр! - person GeneCode; 19.04.2018

В документации конструктора QSettings указано:

Используйте setDefaultFormat() перед вызовом этого конструктора, чтобы изменить формат по умолчанию, используемый этим конструктором.

Поэтому вызовите setDefaultFormat перед созданием объекта QSettings:

QSettings::setDefaultFormat(QSettings::IniFormat);
QSettings IniFile(K_COMPNAME,K_INIFILENAME);
IniFile.setValue("Location",loc);
IniFile.setValue("BaudRate",baud);
IniFile.sync();
person Thomas McGuire    schedule 18.04.2018