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

标签 c++ windows qt qt4 qsettings

我正在尝试将 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()
Loaded 1 keys.
[END] loadSettings()
Settings has 0 keys.
""

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

最佳答案

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

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

QSettings::setDefaultformat( QSettings::IniFormat );

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

关于c++ - 从 IniFormat 和 UserScope 创建的全局 QSettings 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185993/

相关文章:

c++ - 在 C++ 中获取段错误,但为什么呢?

windows - Windows 服务的 DirectX 访问

windows - 我混淆了 NTLM 和 NTLM(在网络上)

qt - 在Windows PyQt中删除虚线边框而不设置NoFocus

c++ - 如何在 Windows 上使用 Qt Creator 导出并链接到 dll?

c++ - 当 main() 退出时,分离的线程会发生什么?

C++ 填充动态数组int

windows - 如何从Delphi代码的IShellItem2.GetProperty输出中获取FindData结构?

qt - 静态链接 Qt 与开源版本

c++ - 如何外部化转换运算符?