我正在尝试将 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文件已创建并具有正确的数据。我错过了什么?