我正在尝试将 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/