Глобальный объект QSettings, созданный из IniFormat и UserScope - PullRequest
1 голос
/ 18 ноября 2011

Я пытаюсь использовать объект QSettings с настройками IniFormat для UserScope, загруженными при запуске приложения. Я переместил код установки QSettings в отдельный метод и вызвал его из main (), как показано в следующем фрагменте:

#include <QDebug>
#include <QSettings>
#include <QStringList>

void loadSettings()
{
    qDebug() << "[BEGIN] loadSettings()";

    QCoreApplication::setOrganizationName("Org");
    QCoreApplication::setApplicationName("App");

    QSettings settings(QSettings::IniFormat,
                       QSettings::UserScope,
                       "Org",
                       "App");

    settings.setValue("TheAnswer", "42");

    QStringList keys = settings.allKeys();
    qDebug() << "Loaded " << keys.size() << " keys.";

    qDebug() << "[END] loadSettings()";
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    loadSettings();

    QSettings settings;
    QStringList keys = settings.allKeys();
    qDebug() << "Settings has " << keys.size() << " keys.";

    // Empty
    qDebug() << settings.value("TheAnswer").toString();

    return a.exec();
}

В результате получается:

[НАЧАЛО] loadSettings ()
Загружен 1 ключ.
[END] loadSettings ()
Настройки имеет 0 клавиш.
""

Глядя на документацию для QSettings , говорится, что использование QCoreApplication для задания имени организации и имени приложения позволит использовать удобный метод создания QSettings из любой точки приложения, поэтому я понимаю является то, что фрагмент кода должен иметь доступ к значению, хранящемуся с ключом "TheAnswer", который был загружен методом loadSettings (). Тем не менее, когда я создаю новый объект QSettings, используя удобный метод, у него нет пар ключ / значение. Я проверил, что INI-файл создан и содержит правильные данные. Чего мне не хватает?

1 Ответ

2 голосов
/ 18 ноября 2011

Я полагаю, что проблема в том, что формат по умолчанию QSettings::NativeFormat вместо QSettings::IniFormat, который вы используете.

Я заметил, что есть статическая функция QSettings::setDefaultFormat(), поэтому я бы попробовал добавить это к вашей функции loadSettings ():

QSettings::setDefaultformat( QSettings::IniFormat );

Кроме того, после того, как вы установили приложение / организацию и формат по умолчанию, я не думаю, что вам нужно передавать какие-либо аргументы конструктору QSetting s в вашей функции loadSettings().

...