如何qsettings ini读取ini的域

zz_yun 的BLOG
用户名:zz_yun
文章数:565
评论数:158
访问量:2015702
注册日期:
阅读量:5863
阅读量:12276
阅读量:322279
阅读量:1032743
51CTO推荐博文
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 ConfigI
会在/home/Dawei目录下生成config.rc配置文件内容为
参数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&&
QSettings *reg = new QSettings(&HKEY_CURRENT_USER\\Software\\yinhaifan&, QSettings::NativeFormat); reg-&setValue(&registered&,true);
当然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&);&&
QSettings *reg = new QSettings(&HKEY_CURRENT_USER\\Software\\yinhaifan&, QSettings::NativeFormat); if (reg-&value(&registered&,false).toBool()) { QMessageBox::information(NULL,&information&,&registered&); }
还可以toInt(),toString()等。
3、用QSettings写ini文件:
QSettings *ConfigIni = new QSettings(&D:\\a.ini&,QSettings::IniFormat,0);&&
ConfigIni-&setValue(&/config/node1&,ui-&lineEdit-&text());&&
delete ConfigI&&
QSettings *ConfigIni = new QSettings(&D:\\a.ini&,QSettings::IniFormat,0); ConfigIni-&setValue(&/config/node1&,ui-&lineEdit-&text()); delete ConfigI
4、用QSettings读ini文件:
QSettings *ConfigIni = new QSettings(&D:\\a.ini&,QSettings::IniFormat,0);&&
ui-&lineEdit_2-&setText(ConfigIni-&value(&/config/node1&,&20&).toString());&&
delete ConfigI&&
QSettings *ConfigIni = new QSettings(&D:\\a.ini&,QSettings::IniFormat,0); ui-&lineEdit_2-&setText(ConfigIni-&value(&/config/node1&,&20&).toString()); delete ConfigI
&& 这几段代码都是在Qt Creator里面写的,所以用ui-&lineEdit*-&text()和ui-&lineEdit*-&setText()做输入和输出了。
&& 在文档中的QSettings Class Reference部分讲的很清楚
---------------------------------------------------------------------
m_nDevNo = nDevNo;
&QString strT
&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);
&&&&&ui.SelfDspLgu-&setCurrentIndex(0);
&&&if (outStr == &工作语言&)
&&&&if ( mySetting-&value(key,&0&).toInt() == 1)
&&&&&ui.WorkLgu-&setCurrentIndex(1);
&&&&&ui.WorkLgu-&setCurrentIndex(0);
&&&if (outStr == &离线工作&)
&&&&if ( mySetting-&value(key,&0&).toInt() == 1)
&&&&&ui.WorkMode-&setCurrentIndex(1);
&&&&&ui.WorkMode-&setCurrentIndex(0);
&&&if (outStr == &召唤自描述方式&)
&&&&if ( mySetting-&value(key,&0&).toInt() == 1)
&&&&&ui.SelfDspSource-&setCurrentIndex(1);
&&&&&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();本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
15:43:41 15:45:42 15:46:27 16:38:41QSettings写入INI文件空格变成%20
[问题点数:50分,结帖人thefirstz]
QSettings写入INI文件空格变成%20
[问题点数:50分,结帖人thefirstz]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年9月 Windows专区大版内专家分月排行榜第一2012年9月 C/C++大版内专家分月排行榜第一2012年8月 Windows专区大版内专家分月排行榜第一
2012年9月 其他开发语言大版内专家分月排行榜第二2012年8月 VC/MFC大版内专家分月排行榜第二2012年8月 其他开发语言大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。随笔 - 895&
评论 - 112&
&&&&&&&&&&&
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 ConfigI会在/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&&&
QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan", QSettings::NativeFormat); reg-&setValue("registered",true);
当然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");&&
QSettings *reg = new QSettings("HKEY_CURRENT_USER\\Software\\yinhaifan", QSettings::NativeFormat); if (reg-&value("registered",false).toBool()) { QMessageBox::information(NULL,"information","registered"); }
还可以toInt(),toString()等。
3、用QSettings写ini文件:
QSettings *ConfigIni =&new&QSettings("D:\\a.ini",QSettings::IniFormat,0);&&
ConfigIni-&setValue("/config/node1",ui-&lineEdit-&text());&&
delete&ConfigI&&
QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0); ConfigIni-&setValue("/config/node1",ui-&lineEdit-&text()); delete ConfigI
4、用QSettings读ini文件:
QSettings *ConfigIni =&new&QSettings("D:\\a.ini",QSettings::IniFormat,0);&&
ui-&lineEdit_2-&setText(ConfigIni-&value("/config/node1","20").toString());&&
delete&ConfigI&&
QSettings *ConfigIni = new QSettings("D:\\a.ini",QSettings::IniFormat,0); ui-&lineEdit_2-&setText(ConfigIni-&value("/config/node1","20").toString()); delete ConfigI
&& 这几段代码都是在Qt Creator里面写的,所以用ui-&lineEdit*-&text()和ui-&lineEdit*-&setText()做输入和输出了。
&& 在文档中的QSettings Class Reference部分讲的很清楚
---------------------------------------------------------------------
m_nDevNo = nDevNo;QString strTQString 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);elseui.SelfDspLgu-&setCurrentIndex(0);}if (outStr == "工作语言"){if ( mySetting-&value(key,"0").toInt() == 1)ui.WorkLgu-&setCurrentIndex(1);elseui.WorkLgu-&setCurrentIndex(0);}
&&&if (outStr == "离线工作"){if ( mySetting-&value(key,"0").toInt() == 1)ui.WorkMode-&setCurrentIndex(1);elseui.WorkMode-&setCurrentIndex(0);}
&&&if (outStr == "召唤自描述方式"){if ( mySetting-&value(key,"0").toInt() == 1)ui.SelfDspSource-&setCurrentIndex(1);elseui.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();
阅读(...) 评论()下次自动登录
现在的位置:
& 综合 & 正文
QSettings 用法(一)
本文先从概念和用法上讲述下QSettings的简单用法,最后以一个简单而较全面的使用例子结束,一句话:实践出真知!
QSettings 类提供“持久性”,平台独立的应用设置。意思是,程序关闭后QSettings把窗体大小,位置,用户设置的Option 保存起来,下次
打开程序时再重新加载。
如果你需要的是“非持久性” 基于内存的数据结构,可以考虑使用QMap&QString,QVariant& 代替。
通常,对于Windows,配置信息保存在“注册表”中,Mac OS 是XML 文件,Unix 是INI 文件
// 构造函数
QSettings settings("MySoft", "Star Runner"); //
公司或组织名
// 应用程序名
QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain(""); // 专为Mac OS X 准备的
QCoreApplication::setApplicationName("Star Runner");
如果要在程序很多地方使用QSettings,用 QCoreApplication::setOrganizationName() 和QCoreApplication::setApplicationName() 然后用QSettings 的默认构造函数。
这样,公司或组织名,应用程序名只要指定一次,QSettings settings 到处扔就行。
QSettings 存储了一对键值( Key / value ) ,Key 是一个QString,Value是一个QVariant
settings.setValue("editor/wrapMargin", 68);
//添加一对键值
添加键值的时侯,如果Key 已存在,则Value 被重写。
出于效率的原因,setValue 不会立既写入(如注册表,INI, XML), 要立既写入可以用sync() 函数。
int margin = settings.value("editor/wrapMargin").toInt();
通过Key,取回Value。如果指定的Key 不存在,QSettings 返回空的QVariant(转成整型是 0)。
// 类型转换
QSettings settings("MySoft", "Star Runner");
QColor color =settings.value("DataPump/bgcolor").value&QColor&();
// 通过"/" 分组
settings.setValue("mainwindow/size",win-&size());
settings.setValue("mainwindow/fullScreen",win-&isFullScreen());
settings.setValue("outputpanel/visible",panel-&isVisible());
settings.beginGroup("mainwindow");
settings.setValue("size", win-&size());
settings.setValue("fullScreen",win-&isFullScreen());
settings.endGroup();
settings.beginGroup("outputpanel");
settings.endGroup();
添加分组,并链表化,读写分组
void QSettings::beginWriteArray(
constQString
& prefix,int
size =-<span style="color:#)
Adds prefix to the current group and starts writing an array of size size.
If size is -<span style="color:# (the default), it is automatically determined based on the indexes of the entries written.
If you have many occurrences of a certain set of keys,
you can use arrays to make your life easier.
For example, let's suppose that you want to save a variable-length list of user names and passwords.
You could then write:
struct Login{
QString userName;
QString password;
QList&Login& logins;
QSettings settings;
settings.beginWriteArray("logins");
for (int i = <span style="color:#; i & logins.size(); ++i) {
settings.setArrayIndex(i);
settings.setValue("userName", list.at(i).userName);
settings.setValue("password", list.at(i).password);
settings.endArray();
int QSettings::beginReadArray(
constQString
Adds prefix to the current group and starts reading from an array. Returns the size of the array.
struct Login {
QString userName;
QString password;
QList&Login& logins;
QSettings settings;
int size = settings.beginReadArray("logins");
for (int i = <span style="color:#; i & size; ++i) {
settings.setArrayIndex(i);
Login login;
login.userName = settings.value("userName").toString();
login.password = settings.value("password").toString();
logins.append(login);
settings.endArray();
QStringList QSettings::childGroups()
Returns a list of all key top-level groups that contain keys that can be read using the QSettings object.
QSettings settings;
settings.setValue("fridge/color", Qt::white);
settings.setValue("fridge/size", QSize(<span style="color:#, <span style="color:#));
settings.setValue("sofa", true);
settings.setValue("tv", false);
QStringList groups = settings.childGroups();
// groups: ["fridge"]
If a groupis
beginGroup(),the
first-levelkeys
group are returned,without
settings.beginGroup("fridge");
groups = settings.childGroups();
// groups: []
You can navigate through the entire setting hierarchy using childKeys() and childGroups() recursively.
See also childKeys() and allKeys().
readSettings()
/writeSettings()
void MainWindow::writeSettings()
QSettings settings("Moose Soft", "Clipper");
settings.beginGroup("MainWindow");
settings.setValue("size", size());
settings.setValue("pos", pos());
settings.endGroup();
void MainWindow::readSettings()
QSettings settings("Moose Soft", "Clipper");
settings.beginGroup("MainWindow");
resize(settings.value("size", QSize(<span style="color:#0, <span style="color:#0)).toSize());
move(settings.value("pos", QPoint(<span style="color:#0, <span style="color:#0)).toPoint());
settings.endGroup();
// readSettings() and writeSettings() 必须分别位于主窗体的构造函数和closeEvent函数里面。
MainWindow::MainWindow()
readSettings();
void MainWindow::closeEvent(QCloseEvent*event)
if (userReallyWantsToQuit()) {
writeSettings();
event-&accept();
event-&ignore();
&QtGui/QApplication&
#include "mainwindow.h"
int main(int argc, char *argv[])
QApplication a(argc, argv);
MainWindow w;
return a.exec();
mainwindow.h
MAINWINDOW_H
#define MAINWINDOW_H
#include &QMainWindow&
namespace Ui {
class MainWindow;
class MainWindow : public QMainWindow
explicit MainWindow(QWidget *parent = <span style="color:#);
~MainWindow();
Ui::MainWindow *ui;
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include&QList&
#include&QSettings&
#include&QFile&
#include&QStringList&
#include&QDebug&
struct Login {
QString userName;
QString password;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui-&setupUi(this);
QList&Login& logins;
Login lg1[<span style="color:#];
for(int i=<span style="color:#;i&<span style="color:#;i++){
lg1[i].userName=QString("log%1").arg(i);
lg1[i].password="000";
logins&&lg1[i];
QString myfile="test.ini";
QSettings *settings=new QSettings(myfile,QSettings::IniFormat);
settings-&beginWriteArray("logins1");//写数组logins1
for (int i = <span style="color:#; i & logins.size(); ++i) {
settings-&setArrayIndex(i);
settings-&setValue("userName", logins.at(i).userName);
settings-&setValue("password", logins.at(i).password);
QList&Login& logins2;
Login lg2[<span style="color:#];
for(int i=<span style="color:#;i&<span style="color:#;i++){
lg2[i].userName=QString("log%1").arg(i+<span style="color:#);
lg2[i].password="000";
logins2&&lg2[i];
settings-&endArray();
//QString myfile="test.txt";
//QSettings *settings=new QSettings(myfile,QSettings::IniFormat);
settings-&beginWriteArray("logins2");//写数组logins2
for (int i = <span style="color:#; i & logins2.size()+<span style="color:#; ++i) {
settings-&setArrayIndex(i);
settings-&setValue("userName", logins2.at(i-<span style="color:#).userName);
settings-&setValue("password", logins2.at(i-<span style="color:#).password);
settings-&endArray();
QStringList groups = settings-&childGroups();
foreach(QString str,groups)//列出所有子组
qDebug()&&str;
//QSettings
int size = settings-&beginReadArray("logins1");
for (int i = <span style="color:#; i & size; ++i) {
settings-&setArrayIndex(i);
Login login;
login.userName = settings-&value("userName").toString();
login.password = settings-&value("password").toString();
logins.append(login);
settings-&endArray();
qDebug()&&logins.size();
for(int i=<span style="color:#;i&logins.size();i++)
qDebug()&&i&&logins[i].userName;
size = settings-&beginReadArray("logins2");
for (int i = <span style="color:#; i & size; ++i) {
settings-&setArrayIndex(i);
Login login;
login.userName = settings-&value("userName").toString();
login.password = settings-&value("password").toString();
logins.append(login);
settings-&endArray();
qDebug()&&logins.size();
for(int i=<span style="color:#;i&logins.size();i++)
qDebug()&&i&&logins[i].userName;
settings-&beginWriteArray("maingroup");
//for (int i = <span style="color:#; i & logins2.size()+5; ++i) {
settings-&setValue("userName", "root");
settings-&setValue("password", "000");
settings-&endArray();
qDebug()&&settings-&value("maingroup/userName").toString();//列出maingroup下userName的值
MainWindow::~MainWindow()
delete ui;
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 c 读取ini文件 的文章

 

随机推荐