从IniFormat和UserScope创建的全局QSettings对象

时间:2011-11-18 16:56:56

标签: c++ windows qt qt4 qsettings

我正在尝试使用QSettings对象,并在应用程序启动时加载用于UserScope设置的IniFormat。我将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个键。
  “”

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

1 个答案:

答案 0 :(得分:2)

我认为问题是默认格式为QSettings::NativeFormat,而不是您正在使用的QSettings::IniFormat

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

QSettings::setDefaultformat( QSettings::IniFormat );

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