您的位置:首页 > 其它

qsetting 读取配置文件

2012-03-02 17:15 141 查看
( 一)简单了解
配置文件(.ini)格式:

number=2

[config]

node1=sucess;iii

size=20

[source]

name=PC

其中每行必须顶格写,;后的为注释部分,可用[]来定义上一层的项目。

代码示例如下:


QSettings settings("/srv/c.ini",QSettings::IniFormat);

ui->label->setText(settings.value("config/node1").toString());

ui->lineEdit->setText(settings.value("config/size").toString());

int a=settings.value("number").toInt();

qDebug("the value a is: %d",a);

(二)深入一些

QT4.0一个非常有用的类QSettings

QSettings是qt4.0提供的一个读取配置文件的类,在windows平台,它提供了ini文件读些,注册表读写的功能。而且使用也非常简单。

 

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); 
其他和读写注册表差不多,我就懒得写了,发觉QT4读写的这种配置,即可兼容windows下的ini文件,同时它的功能也比windows API所提供的功能强.

 

(三)综合理解

QSettings *ConfigIni = new QSettings(QSettings::Ini);

ConfigIni->insertSearchPath(QSettings::Unix, "/home/Dawei");.//配置文件目录

ConfigIni->writeEntry(QString::fromUtf8("/config./opt/参数1"), QString::fromUtf8("中文"));

String aaa = ConfigIni->readEntry(QString::fromUtf8("/config./opt/参数1");

delete ConfigIni;

会在/home/Dawei目录下生成config.rc配置文件内容为

[opt]

参数1=中文

 

---------------------------------------

QSettings settings("../etc/bpms.conf", QSettings::IniFormat, &app);

QString db_hostname = settings.value("hostname").toString();

QString db_database = settings.value("database").toString();

QString db_username = settings.value("username").toString();

QString db_password = settings.value("password").toString();

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

db.setHostName(db_hostname);

db.setDatabaseName(db_database);

db.setUserName(db_username);

db.setPassword(db_password);

 

---------------------------------------------------------------

需要#include <QSettings>

    只举几个简单的例子:

1、用QSettings写注册表

QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan",  

                     QSettings::NativeFormat);  
     reg->setValue("registered",true);  

    delete reg;  

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读注册表

QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan",  

                 QSettings::NativeFormat);  
if (reg->value("registered",false).toBool())  

{  
     QMessageBox::information(NULL,"information","registered");  

}  
delete reg;  

QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan", QSettings::NativeFormat); if (reg->value("registered",false).toBool()) { QMessageBox::information(NULL,"information","registered"); } delete reg;

还可以toInt(),toString()等。

3、用QSettings写ini文件:

QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0);  

ConfigIni->setValue("/config/node1",ui->lineEdit->text());  

delete ConfigIni;  

QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0); ConfigIni->setValue("/config/node1",ui->lineEdit->text()); delete ConfigIni;

4、用QSettings读ini文件:

QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0);  

ui->lineEdit_2->setText(ConfigIni->value("/config/node1","20").toString());  

delete ConfigIni;  

QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0); ui->lineEdit_2->setText(ConfigIni->value("/config/node1","20").toString()); delete ConfigIni;

   这几段代码都是在Qt Creator里面写的,所以用ui->lineEdit*->text()和ui->lineEdit*->setText()做输入和输出了。

   在文档中的QSettings Class Reference部分讲的很清楚

---------------------------------------------------------------------

m_nDevNo = nDevNo;

 QString strTemp;

 QString xmlPath = CSC_APP.m_strWorkPath + "/InitInfo.ini";

 QSettings *mySetting = new QSettings(xmlPath,QSettings::IniFormat);

 foreach (QString group, mySetting->childGroups())

 {

  mySetting->beginGroup(group);

  foreach (QString key, mySetting->childKeys())

  {

   QTextCodec *codec=QTextCodec::codecForName("GBK");

   QString outStr = codec->toUnicode(key.toLatin1());

   if (outStr == "自描述语言")

   {

    if ( mySetting->value(key,"0").toInt() == 1)

     ui.SelfDspLgu->setCurrentIndex(1);

    else

     ui.SelfDspLgu->setCurrentIndex(0);

   }

   if (outStr == "工作语言")

   {

    if ( mySetting->value(key,"0").toInt() == 1)

     ui.WorkLgu->setCurrentIndex(1);

    else

     ui.WorkLgu->setCurrentIndex(0);

   }

   if (outStr == "离线工作")

   {

    if ( mySetting->value(key,"0").toInt() == 1)

     ui.WorkMode->setCurrentIndex(1);

    else

     ui.WorkMode->setCurrentIndex(0);

   }

   if (outStr == "召唤自描述方式")

   {

    if ( mySetting->value(key,"0").toInt() == 1)

     ui.SelfDspSource->setCurrentIndex(1);

    else

     ui.SelfDspSource->setCurrentIndex(0);

   }

   if (outStr == "组播地址")

   {

    strTemp = mySetting->value(key,"236.8.8.8").toString();

    ui.GrpAddress->setText(strTemp);

   }

   if (outStr == "接收端口号")

   {

    strTemp = mySetting->value("接收端口号","2000").toString();

    ui.RecPort->setText(strTemp);

   }

   if (outStr == "发送端口号")

   {

    strTemp = mySetting->value("发送端口号","2001").toString();

    ui.TargetPort->setText(strTemp);

   }

   if (outStr == "启用本机地址")

   {

    strTemp = mySetting->value(key,"0").toString();

   }

   if (outStr == "本机地址")

   {

    strTemp = mySetting->value(key,"0").toString();

    ui.LocalIp->setText(strTemp);

   }

   if (outStr == "装置名称")

   {

    strTemp = mySetting->value(key,"0").toString();

    ui.EqpName->setText(strTemp);

   }

   if (outStr == "装置地址")

   {

    strTemp = mySetting->value(key,"0").toString();

    ui.EqpAddress->setText(strTemp);

   }

   if (outStr == "装置IP")

   {

    strTemp = mySetting->value(key,"0").toString();

    ui.TargetIp->setText(strTemp);

   }

  }

  mySetting->endGroup();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: