lvmengzou的个人主页

http://www.qtcn.org/bbs/u/157768  [收藏] [复制]

lvmengzou

  • 2

    关注

  • 2

    粉丝

  • 26

    访客

  • 等级:新手上路
  • 总积分:48
  • 男,2011-11-25

最后登录:2023-12-25

更多资料

日志

QT之QSetting类

2015-04-16 07:43


QT之QSetting类


      用户对应用程序经常有这样的要求:要求它能记住它的 settings ,比如窗口大小,位置,一些别的设置,还有一个经常用的,就是 recent files ,等等这些都可以通过 Qsettings 来实现。 我们知道,这些 settings 一般都是存在系统里的,比如 windows 一般都写在系统注册表或者写 INI 文件, mac 系统一般都在 XML 文件里,那么按照一般的标准来说,许多应用程序是用 INI 文件来实现的。而 Qsettings 就是提供了一种方便的方法来存储和恢复应用程序的 settings 。
    QSettings 的 API 是基于 Qvariant , Qvariant 是一种数据类型的集合,它包含了大部分通常的 Qt 数据类型,比如 QString , QRec , QImage ,等等。
    当我们创建一个 Qsettings 的对象时,我们需要传递给它两个参数,第一个是你公司或者组织的名称,第二个事你的应用程序的名称。比如:
    Settings = Qsettings(“MySoft”,”QtPad”)
    公司名称: MySoft ,程序名称: QtPad
    假如我们在应用程序中多次要用到 Qsettings ,为了简单其间,我们可以在主程序中先如下声明。
    QtCore.QCoreApplication.setOrganizationName("MySoft")
QtCore.QCoreApplication.setOrganizationDomain("mysoft.com")
QtCore.QCoreApplication.setApplicationName("QtPad")
当然前提是已经 from PyQt4 import QtCore
然后在应用程序的任何地方想要声明一个 Qsettings 类型的变量,便不需要书写两个参数了,直接用 settings = Qsettings 即可。
那么如何用它来保持应用程序的 settings 信息呢?我们以字典数据类型与之类比,它也有 key ,以及对应的 value 。比如下面例子:
settings = Qsettings(“MySoft”,”QtPad”)
Mainwindow = QmainWindow()
    settings.setValue(“pos”,QVariant(Mainwindow.pos())

settings.setValue(“size”,QVariant(Mainwindow.size())
上面两句就是把当前窗口的位置,和大小两个信息记录到了 settings 中,其中的 key 就是 ”pos” 和 ”size” 两个 Qstring 类型,而它所对应的值就是 QVariant 类型的。当然如果我们要写的 key 已在 settings 中存在的话,则会覆盖原来的值,写入新值。
如何读取 Qsettings 里的内容呢?如下:
Pos = settngs.value(“pos”).toPoint()
Size = settings.value(“size”).toSize()
当然如果 key 所对应的 value 是 int 型的,也可 toInt(), 如果没有我们要找的 key ,则会返回一个 null QVariant 如果用 toInt 的话会得到 0 。
那么实际应用中我们一般会如下:
pos= settings.value("pos", QVariant(QPoint(200, 200))).toPoint()
size= settings.value("size", QVariant(QSize(400, 400))).toSize()
self.resize(size)
self.move(pos)
意思是,如果 settings 里有以前存下的 ( 用 setValue 设置的 )pos 和 size 的值,则读取,如果没有,不会返回 null ,而会使用我们给它的起始值—— default value ——即应用程序第一次运行时的情况。
来源: http://blog.csdn.net/yhtoo/archive/2011/04/02/6298837.aspx
Qt读写注册表和ini文件[转
  只举几个简单的例子:
1、用QSettings写注册表
  1. QSettings *reg =newQSettings("HKEY_CURRENT_USER\\Software\\yinhaifan",  
  2.                      QSettings::NativeFormat);  
  3.      reg->setValue("registered",true);  
  4.     deletereg;  
QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan", QSettings::NativeFormat); reg->setValue("registered",true); delete reg;
当然reg->setValue还可以写入字符串,整型之类的数据。
比如reg->setValue("registered","yes");
2、用QString读注册表
  1. QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan",  
  2.                  QSettings::NativeFormat);  
  3. if (reg->value("registered",false).toBool())  
  4. {  
  5.      QMessageBox::information(NULL,"information","registered");  
  6. }  
  7. delete reg;
  8. 还可以toInt(),toString()等。
3、用QSettings写ini文件:
  1. QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0);  
  2. ConfigIni->setValue("/config/node1",ui->lineEdit->text());  
  3. delete ConfigIni;  
4、用QSettings读ini文件:
  1. QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0);  
  2. ui->lineEdit_2->setText(ConfigIni->value("/config/node1","20").toString());  
  3. delete ConfigIni;  
   这几段代码都是在Qt Creator里面写的,所以用ui->lineEdit*->text()和ui->lineEdit*->setText()做输入和输出了。
   在文档中的QSettings Class Reference部分讲的很清楚
来源:http://apps.hi.baidu.com/share/detail/17067988
QSettings::Format有两种:
QSettings::NativeFormat在windows平台可以读写windows注册表.
QSettings::IniFormat可以读写ini格式的配置文件
在Unix/X11平台下这两个Format效果是一样的:(

1.读写注册表
//注意的就是路径名必须是"/"而不是"\"等.否则不能读写,同时注意
//Format为QSettings::NativeFormat
QSettings *settings = new QSettings("HKEY_CURRENT_USER/", QSettings::NativeFormat);

//写HKEY_CURRENT_USER/regedit/test,设置test值为red
settings->setValue("regedit/test", "red");

//读 HKEY_CURRENT_USER/regedit/test,默认值是ddd
QString value = settings->value("regedit/test", "ddd").toString();

删除设置对应的是settings->remove( const QString & key )

2.读取ini配置文件
ini文件格式如下:
[Alpha]
Beta/Beta=1, 3, 4
Beta/Gamma=2
Beta/Delta=1111
Beta/Epsilon=5
Iota=7
Omicron=11

QSettings *settings = new QSettings(fileName, QSettings::IniFormat);

//写Beta/Beta
settings->setValue("Alpha/Beta/Beta", 68);
应用说明:

  此类在程序开发中通常用于保存一些配置信息,是一个常用的类。
分类:默认分类|回复:0|浏览:1080|全站可见|转载
 

下一篇: QT调试  转载

上一篇: 程序异常中止

Powered by phpwind v8.7 Certificate Copyright Time now is:05-03 06:43
©2005-2016 QTCN开发网 版权所有 Gzip disabled