详细描述:
QSettings类提供了持久的独立于平台的应用程序设置。
用户通常希望应用程序记住其设置(窗口的大小和位置、期权等)在会议。这些信息通常存储在系统注册表在Windows上,而在OS X和iOS上属性列表文件。在Unix系统中,在缺乏标准的情况下,许多应用程序(包括KDE应用程序)使用INI文本文件。
QSettings是围绕这些抽象技术,使您能够以便携的方式保存和恢复应用程序设置。它还支持定制的存储格式。
QSettings的API是基于QVariant,允许您保存最有价值类型,如QString QRect,和QImage,基于最小的努力。如果你需要的是一个非持久性基于内存结构,考虑使用QMap < QString QVariant >。
当创建一个QSettings对象,你必须通过你的公司或机构的名称以及您的应用程序的名称。例如,如果你的product被称为Star Runner和你的公司叫做MySoft,您将构建QSettings对象如下:
QSettings settings("Mysoft","Star Runner");
QSettings可以创建对象在堆栈上或在堆上(即使用新的)。构造和摧毁QSettings对象是非常快。
如果使用QSettings多处在你的应用程序中,您可能希望指定组织名称和应用程序名称使用QCoreApplication::setOrganizationName()和QCoreApplication::setApplicationName(),然后使用默认QSettings构造函数:
QCoreApplication::setOrganizationName("MytSoft");
QCoreApplication::setOrganizationName("mysoft.com");
QCoreApplication::setApplicationName("Star Runner");
...
QSettings settings;
QSettings设置。每个设置由QString指定设置的名称(键值)和QVariant存储数据的值。写一个设置,使用setValue()。例如:
settings.setValue("editor/wrapMargin",68);
如果已经存在相同的key,现有的值覆盖的新值。效率的变化可能不是立即保存到永久存储。(你可以随时调用sync()来提交您的更改。)
int margn = settings.value("editor/wrapMargin").toInt();
为了测试一个给定的key是否存在,调用contains()。删除相关的设置键,调用remove()。获取列表的所有key,叫allKeys()。删除所有key,调用clear()。
相反,您可以使用QVariant::value()或qVariantValue()模板函数。例如:
Qsettings settings("MySoft","Star Runner");
QColor color = settings.value("DataPump/bgcolor").value<QColor>();
反转换:
Qsettings settings("MySoft","Star Runner");
QColor color = palette().backgroud().color();
settings.setValue("DataPump/bgcolor",color);
voidLogin::writeSettings()
{
QSettingssettings("YNoteUi","Login");
settings.beginGroup("MainWidown");
settings.setValue("size",size());
settings.setValue("pos",pos());
settings.endGroup();
}
voidLogin::readSettings()
{
QSettingssettings("YNoteUi","Login");
settings.beginGroup("MainWidown");
resize(settings.value("size",QSize(400,400)).toSize());
move(settings.value("pos",QPoint(200,200)).toPoint());
settings.endGroup();
}
QSettings是可重入的。这意味着您可以同时使用不同的QSettings对象在不同的线程。这保证即使QSettings对象引用同一个文件在磁盘上(或者相同的条目在系统注册表中)。如果通过一个QSettings对象设置被修改,更改会立即可见其他QSettings对象操作在同一位置和生活在相同的过程。
QSettings可以安全地使用不同的流程(可应用程序的不同实例同时运行或完全不同的应用程序)来读取和写入相同的系统位置。它使用咨询文件锁定和智能融合算法,以确保数据的完整性。注意,sync()入口变化由其他进程(除了写作这个QSettings)的变化。
直接访问INI和.plist文件:
QSettings settings("/home/gq/user.ini",QSettings::IniFormat);
然后您可以使用QSettings对象读取和写入文件中的设置。
类型定义一个指针指向一个函数的签名:
ReadFunc用于registerFormat()作为一个指针指向一个函数,读取一组键/值对。ReadFunc应该所有的选项读一遍,并返回所有的设置SettingsMap容器,它最初是空的。
类型定义一个指针指向一个函数的签名:
bool myWriteFunc(QIODevice &device,QSettings::AettingsMap &map);
WriteFunc用于registerFormat()作为一个指针指向一个函数,它写了一组键/值对。WriteFunc只调用一次,所以你需要输出设置。
Typedef for QMap<QString,QVariant>
Status QSettings::status() const
返回一个状态码表示被QSettings遇到的第一个错误,或QSettings::NoError如果没有错误发生。
请注意,QSettings延迟执行一些操作。出于这个原因,您可能需要调用sync(),以确保数据存储在QSettings写到磁盘之前调用status()。
写永久存储任何未保存的更改,并重新加载任何设置,改变同时由另一个应用程序。
自动地调用这个函数从QSettings的析构函数和定期事件循环,所以你通常不需要调用它自己。
返回值设置键。如果设置不存在,返回defaultValue。
如果没有指定默认值,则返回默认QVariant。
注意,Windows注册表和INI文件使用不区分大小写键,而CFPreferences API在OS X和iOS使用区分大小写的钥匙。为了避免可移植性问题,看到部分和关键语法规则。例:
QSettings settings;
settings.setValue("animal/snake", 58);
settings.value("animal/snake", 1024).toInt(); // returns 58
settings.value("animal/zebra", 1024).toInt(); // returns 1024
settings.value("animal/zebra").toInt(); // returns 0
、
此文档持续更新中。。。
经过一点探索,终于将QSettings记录登录信息(即用户名和密码以及记住密码和自动登录的状态信息)的部分完整的做出来了,详细情况请看下一篇。