QSettings类提供了持久的跨平台应用程序设置。
用户通常期望应用程序记住它的设置(窗口大小、位置等)所有会话。这些信息通常存储在Windows系统注册表,OS X和iOS的属性列表文件中。在Unix系统中,在缺乏标准的情况下,许多应用程序(包括KDE应用程序)使用INI文本文件。
QT QSettings读写配置文件,来保存程序的初始值。
在做项目时,有时候同样的程序要运行在不同的环境或设备上,而这些环境不可能完全相同(比如IP地址),我们也不可能为为每一台设备都编译一个程序。 这时,配置文件就显示出了它的意义。
QSetting 由节、键和值组成, 可以理解为键是节的子集,值是键的内容。
配置文件的内容可手动修改,所以在程序里尽量不要去设置它的值(当然创建的时候可以设置初值,手动修改,以后只读取),而只是获取其值。
1.创建
QSettings(QCoreApplication::applicationDirPath()+"/config.ini", QSettings::IniFormat, this);
2.更新值 // key,value
settings->setValue("/setting/currentTabIndex", index);
3.读取值
settings->value("/setting/currentTabIndex").toInt();
实验效果
核心源码
头文件
class Myapp
{
public:
static QString AppPath; //应用程序路径
static int DeskWidth; //桌面宽度
static int DeskHeigth; //桌面高度
static QString SoftTitle ; //软件标题
static QString SoftVersion; //软件版本
static QString CompanyName; //开发商名称
static QString ContactName; //联系人
static QString ContactTel; //联系电话
static bool AutoRun; //是否开机启动,在windows下有用
static void ReadConfig(); //读取配置文件,在main函数最开始加载程序载入
static void WriteConfig(); //写入配置文件,在更改配置文件、程序关闭时调用
};
初始化静态成员变量,设置默认值
//设置程序进行过程中需要的全局变量 QString Myapp::AppPath = ""; int Myapp::DeskWidth = 1024; int Myapp::DeskHeigth = 768; bool Myapp::AutoRun = true; //存储全局配置信息,程序启动时加载,关闭时保存 QString Myapp::SoftTitle = "XXXX项目"; QString Myapp::SoftVersion = "V1.0"; QString Myapp::CompanyName = "XXXXX科技有限公司"; QString Myapp::ContactName = "XXXX"; QString Myapp::ContactTel = "XXXXXXXXXXX";
源文件
void Myapp::ReadConfig()
{
QString fileName = Myapp::AppPath + "config.ini";
//如果配置文件不存在,则以初始值继续运行
//没有这个判断的话,配置赋值都为空
if (!myHelper::FileIsExist(fileName)) {
//对应中文转成正确的编码
Myapp::SoftTitle = Myapp::SoftTitle;
Myapp::CompanyName = Myapp::CompanyName;
Myapp::ContactName = Myapp::ContactName;
return;
}
QSettings *set=new QSettings(fileName,QSettings::IniFormat);
set->setIniCodec("");
set->beginGroup("AppConfig");
Myapp::SoftTitle = set->value("SoftTitle").toString();
Myapp::SoftVersion = set->value("SoftVersion").toString();
Myapp::CompanyName = set->value("CompanyName").toString();
Myapp::ContactName = set->value("ContactName").toString();
Myapp::ContactTel = set->value("ContactTel").toString();
set->endGroup();
}
void Myapp::WriteConfig()
{
QString fileName = Myapp::AppPath + "config.ini";
QSettings *set = new QSettings(fileName,QSettings::IniFormat);
set->setIniCodec("UTF-8");
set->beginGroup("AppConfig");
set->setValue("SoftTitle",Myapp::SoftTitle);
set->setValue("SoftVersion",Myapp::SoftVersion);
set->setValue("CompanyName",Myapp::CompanyName);
set->setValue("ContactName",Myapp::ContactName);
set->setValue("ContactTel",Myapp::ContactTel);
set->endGroup();
}



