Qt4.0中又增加了一个非常有用的类QSettings,这个类是Qt4提供的一个读取配置文件的类,在Windows平台上,它提供了ini文件的读写,以及注册表的读写功能。我们都知道,用户对于应用程序经常有某种需要,比如说:窗体的大小,出现的位置,以及最近打开的文件等等,而这些需求均可由QSettings类实现。

一般来说settings都存放在系统之中,在windows操作系统下一般都是ini加密文件中或者是系统的注册表中,而对于mac系统来说,一般存放在XML文件中,下面我们就来看看它的具体用法。
读过《C++ GUI Programming with Qt 4, Second Edition》这本书的人应该都遇到过这个疑问,我们先来看看它的构造函数吧:
 
 
  
  1. QSettings ( const QString & organization, const QString & application = QString(), QObject * parent = 0 ) 
  2. QSettings ( Scope scope, const QString & organization, const QString & application = QString(), QObject * parent = 0 ) 
  3. QSettings ( Format format, Scope scope, const QString & organization, const QString & application = QString(), QObject * parent = 0 ) 
  4. QSettings ( const QString & fileName, Format format, QObject * parent = 0 ) 
  5. QSettings ( QObject * parent = 0) 
当我们创建一个QSettings的对象时,一般需要传递两个参数,第一个是公司或者组织的名称,第二个是应用程序的名称,我们以例子来说明问题:
 
 
  
  1. QSettings settings("Yzs_think""Application"); 
公司或组织名称:Yzs_think, 程序名称:Application
下面就要对其值进行设置(一般用法):
1、写入数据:
 
 
  
  1. QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); 
  2. QSize size = settings.value("size", QSize(400, 400)).toSize(); 
  3. resize(size); 
  4. move(pos); 
第一句是设置窗口出现的位置坐标,第二句实现了对窗口大小的设置,第三局和第四句如果 settings 里有以前存下的 ( 用 setValue 设置的 )pos 和 size 的值,则读取,如果没有,不会返回 null ,而会使用我们给它的起始值—— default value ——即应用程序第一次运行时的情况。
2、读出信息数据
 
 
  
  1. QSettings settings("Yzs_think""Application"); 
  2. settings.setValue("pos", pos()); 
  3. settings.setValue("size", size()); 
这里值得注意的是写数据和读数据的时候的公司名称与应用程序名称必须一样,否则无法正常读取。
下面我们以一段具体的程序来说明问题:
 
 
  
  1. void MainWindow::readSettings() 
  2.     QSettings settings("Yzs_think""Application"); 
  3.     QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); 
  4.     QSize size = settings.value("size", QSize(400, 400)).toSize(); 
  5.     resize(size); 
  6.     move(pos); 
  7.  
  8. void MainWindow::writeSettings() 
  9.     QSettings settings("Yzs_think""Application"); 
  10.     settings.setValue("pos", pos()); 
  11.     settings.setValue("size", size()); 
而后在我们的程序中,每次重新打开应用程序时,其窗口大小和位置都是上一次关闭之前的位置。