QSettings使用

頭文件

 

#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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章