头文件
#include <QSettings>
一、最简单操作
QSettings *minifile; //声明
minifile = new QSettings("./config1.ini", QSettings::IniFormat);//实例化
//QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省
minifile->setValue("/para1/first", "1111111"); //写
// /节/键 ,值
qDebug() <<"111"<< minifile->value("/para1/first"); //读
效果:
1、config.ini程序自动创建,不用手动创建
2、ini文件介绍
.ini 文件是Initialization File的缩写,即初始化文件。
除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现不同用户的要求。一般不用直接编辑这些.ini文件,应用程序的图形界面即可操作以实现相同的功能。它可以用来存放软件信息,注册表信息等。相当于一个轻量级数据库。
ini文件格式
INI文件由节、键、值组成。
节
[section]
参数(键=值)
name=value
例如:
[Section1 Name]
KeyName1=value1
KeyName2=value2
...
[Section2 Name]
KeyName21=value21
KeyName22=value22
其中:[Section1 Name]用来表示一个段落。因为INI文件可能是项目中共用的,所以使用[Section Name]段名来区分不同用途的参数区。例如:[Section1 Name]表示传感器灵敏度参数区;[Section2 Name]表示测量通道参数区等等。
注解:使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。
二、类封装管理
1、声明config.h:
#ifndef CONFIG_H
#define CONFIG_H
#include <QVariant>
#include <QSettings>
class Config
{
public:
Config(QString qstrfilename = ""); //构建
virtual ~Config(void); //解析
void Set(QString,QString,QVariant); //增,改
QVariant Get(QString,QString); //取值
void clear(); //清除所有
private:
QString m_qstrFileName;
QSettings *m_psetting;
};
#endif // CONFIG_H
2、config.c
#include "config.h"
#include <QtCore/QtCore>
#include <QDebug>
Config::Config(QString qstrfilename)
{
if (qstrfilename.isEmpty())
{ //无文件名,默认Config.ini
m_qstrFileName = QCoreApplication::applicationDirPath() + "/Config.ini";
}
else
{
m_qstrFileName = qstrfilename;
}
m_psetting = new QSettings(m_qstrFileName, QSettings::IniFormat);
// qDebug() << m_qstrFileName;
}
Config::~Config()
{
delete m_psetting;
m_psetting = 0;
}
void Config::Set(QString qstrnodename,QString qstrkeyname,QVariant qvarvalue)
{
m_psetting->setValue(QString("/%1/%2").arg(qstrnodename).arg(qstrkeyname), qvarvalue);
}
QVariant Config::Get(QString qstrnodename,QString qstrkeyname)
{
QVariant qvar = m_psetting->value(QString("/%1/%2").arg(qstrnodename).arg(qstrkeyname));
return qvar;
}
void Config::clear()
{
m_psetting->clear();
}
3、使用时添加头文件"config.h"
void MainWindow::saveConfig() //存
{
Config().clear(); //清除
Config().Set("serialconfig","BaudRate",ui->BaudRateBox->currentIndex());
Config().Set("serialconfig","DataBit",ui->DataBitsBox->currentIndex());
Config().Set("serialconfig","Parity",ui->ParityBox->currentIndex());
Config().Set("serialconfig","stopbit",ui->stopbitBox->currentIndex());
Config().Set("serialconfig","flow",ui->flowBox->currentIndex());
for(int i=0;i<ui->txcomboBox->count();i++){
Config().Set("sendData",QString::number(i),ui->txcomboBox->itemText(i));
}
for (int j = 0; j < ui->listWidget->count();j++){
Config().Set("fixedData",QString::number(j),ui->listWidget->item(j)->text());
}
}
void MainWindow::readConfig()
{
//读取 ui->BaudRateBox->setCurrentIndex(Config().Get("serialconfig","BaudRate").toInt());
ui->DataBitsBox->setCurrentIndex(Config().Get("serialconfig","DataBit").toInt());
ui->ParityBox->setCurrentIndex(Config().Get("serialconfig","Parity").toInt());
ui->stopbitBox->setCurrentIndex(Config().Get("serialconfig","stopbit").toInt());
ui->flowBox->setCurrentIndex(Config().Get("serialconfig","flow").toInt());
QString buff;
for(int i = 0;i < MAXITEMCOUNT;i++){
buff = Config().Get("sendData",QString::number(i)).toString();
if(buff.isEmpty()){
break;
}else{
ui->txcomboBox->addItem(buff);
}
}
for(int j = 0;j < MAXITEMCOUNT;j++){
buff = Config().Get("fixedData",QString::number(j)).toString();
if(buff.isEmpty()){
break;
}else{
ui->listWidget->addItem(buff);
}
}
}
效果:
参考:
https://blog.csdn.net/qiurisuixiang/article/details/7760828
https://blog.csdn.net/qq_18286031/article/details/78663507
QString的arg方法:https://blog.csdn.net/xu1129005165/article/details/82377908