頭文件
#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