1

我正在尝试将 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();
}

结果输出是:

[BEGIN] loadSettings()
加载了 1 个键。
[END] loadSettings()
设置有 0 个键。
“”

查看 QSettings的文档,它指出使用 QCoreApplication 设置组织名称和应用程序名称将允许从应用程序的任何位置使用便捷的 QSettings 创建方法,所以我的理解是代码片段应该能够访问由 loadSettings() 方法加载的键“TheAnswer”存储的值。然而,当我使用便捷方法创建一个新的 QSettings 对象时,它没有键/值对。我验证了ini文件已创建并具有正确的数据。我错过了什么?

4

1 回答 1

2

我相信问题在于默认格式是您正在使用的QSettings::NativeFormat而不是。QSettings::IniFormat

我注意到有一个静态QSettings::setDefaultFormat()函数,所以我会尝试将它添加到您的 loadSettings() 函数中:

QSettings::setDefaultformat( QSettings::IniFormat );

此外,一旦您设置了应用程序/组织和默认格式,我认为您不需要将任何参数传递给) 函数QSetting中的 s 构造loadSettings(函数。

于 2011-11-18T17:17:17.917 回答