QSettings的用法详解(读Qt creator帮助文档自己理解 )

详细描述:
    
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()来提交您的更改。)
    得到已经设置的值通过value()函数:
     int margn = settings.value("editor/wrapMargin").toInt();

为了测试一个给定的key是否存在,调用contains()。删除相关的设置键,调用remove()。获取列表的所有key,叫allKeys()。删除所有key,调用clear()。
QVariant和GUI类型:
     因为QVariant 是Qt的核心模块,它不能提供QColor等数据类型转换函数,QImage,和QPixmap Qt GUI的一部分。换句话说,没有toColor(),toImage(),或toPixmap QVariant()函数。
相反,您可以使用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);

恢复一个一个GUI应用程序的状态:
    QSettings通常是用于存储一个GUI应用程序的状态。下面的例子说明了如何使用QSettings保存和恢复应用程序的主窗口的状态。
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文件:
    有时你想访问设置存储在一个特定的文件或注册表路径。在所有平台上,如果你想直接读取INI文件,您可以使用QSettings构造函数接受文件名作为第一个参数,通过QSettings::IniFormat作为第二个参数。例如:
       QSettings settings("/home/gq/user.ini",QSettings::IniFormat);
然后您可以使用QSettings对象读取和写入文件中的设置。

typedef QSettings:ReadFunc:
     类型定义一个指针指向一个函数的签名:
     bool myReadFunc(QIODevice &device,QSettings::AettingsMap &map);
ReadFunc用于registerFormat()作为一个指针指向一个函数,读取一组键/值对。ReadFunc应该所有的选项读一遍,并返回所有的设置SettingsMap容器,它最初是空的。
typedef QSettings:WriteFunc:
类型定义一个指针指向一个函数的签名:
   bool myWriteFunc(QIODevice &device,QSettings::AettingsMap &map);
WriteFunc用于registerFormat()作为一个指针指向一个函数,它写了一组键/值对。WriteFunc只调用一次,所以你需要输出设置。

typedef QSettings:SettingsMap:
Typedef for QMap<QString,QVariant>

Status QSettings::status() const
    返回一个状态码表示被QSettings遇到的第一个错误,或QSettings::NoError如果没有错误发生。
  请注意,QSettings延迟执行一些操作。出于这个原因,您可能需要调用sync(),以确保数据存储在QSettings写到磁盘之前调用status()。
void QSettingS::sync()
     写永久存储任何未保存的更改,并重新加载任何设置,改变同时由另一个应用程序。  
  自动地调用这个函数从QSettings的析构函数和定期事件循环,所以你通常不需要调用它自己。

QVariant QSettings::value(const QString & key,const QVariant & defaultValue = QVariant()) const
    返回值设置键。如果设置不存在,返回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记录登录信息(即用户名和密码以及记住密码和自动登录的状态信息)的部分完整的做出来了,详细情况请看下一篇。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值