QQ等應(yīng)用程序可以記住用戶輸入的用戶名和密碼耀销,以及一系列用戶的設(shè)置拍鲤,從而方便了用戶的使用鲸鹦。
在我們自己開發(fā)的程序中澄干,也可以很方便地實現(xiàn)上述功能逛揩。
通過QSettings,我們不需要對編寫讀寫文件的代碼。
我們先看一下其在程序同級目錄默認(rèn)生成的文件中的數(shù)據(jù)格式麸俘。
[setting]
debug=true
os=mac
[user]
password=***
username=江俊廣
其中[setting]是一個node辩稽,其下的debug是一個key,true是一個value从媚。
??的代碼對QSettings進(jìn)一步封裝搂誉。
config.h
#include <QVariant>
#include <QSettings>
//將程序配置信息和用戶信息持久化到硬盤
class Config
{
public:
Config(QString filename="");
~Config();
void set(QString node, QString key, QVariant value);//設(shè)置
QVariant get(QString node, QString key);//查詢值
bool contails(QString node, QString key);//查詢是否存在(node,key)
private:
QString m_filename;
QSettings *m_setting;
};
config.cpp
#include "config.h"
#include <QtCore/QtCore>
Config::Config(QString filename)
{
if(filename.isEmpty()){
m_filename = QCoreApplication::applicationDirPath() + "/Config.ini";
}else{
m_filename = filename;
}
m_setting = new QSettings(m_filename, QSettings::IniFormat);
m_setting->setIniCodec("UTF-8");
}
Config::~Config()
{
delete m_setting;
}
void Config::set(QString node, QString key, QVariant value)
{
m_setting->setValue(QString("/%1/%2").arg(node).arg(key), value);
}
QVariant Config::get(QString node, QString key)
{
QVariant variant = m_setting->value(QString("/%1/%2").arg(node).arg(key));
return variant;
}
bool Config::contails(QString node, QString key)
{
return m_setting->contains(QString("/%1/%2").arg(node).arg(key));
}
除了用于記憶用戶設(shè)置外,通過QSetting也可以進(jìn)行將程序的參數(shù)寫入文件静檬,而不是寫死在代碼里炭懊。這樣在進(jìn)行調(diào)試的時候,可以減少編譯的次數(shù)拂檩。